PySpark: TypeError: l'état devrait être de chaîne ou d'une Colonne
Je suis en train de filtrer un RDD base comme ci-dessous:
spark_df = sc.createDataFrame(pandas_df)
spark_df.filter(lambda r: str(r['target']).startswith('good'))
spark_df.take(5)
Mais les erreurs suivantes:
TypeErrorTraceback (most recent call last)
<ipython-input-8-86cfb363dd8b> in <module>()
1 spark_df = sc.createDataFrame(pandas_df)
----> 2 spark_df.filter(lambda r: str(r['target']).startswith('good'))
3 spark_df.take(5)
/usr/local/spark-latest/python/pyspark/sql/dataframe.py in filter(self, condition)
904 jdf = self._jdf.filter(condition._jc)
905 else:
--> 906 raise TypeError("condition should be string or Column")
907 return DataFrame(jdf, self.sql_ctx)
908
TypeError: condition should be string or Column
Une idée de ce que j'ai raté? Merci!!!!
Il n'y est une réponse parfaite à droite ci-dessous 😉
OriginalL'auteur Edamame | 2016-10-05
Vous devez vous connecter pour publier un commentaire.
DataFrame.filter
, qui est un alias pourDataFrame.where
, s'attend à une expression SQL soit unColumn
:ou l'équivalent d'une chaîne SQL:
Je crois que vous essayez d'utiliser ici
RDD.filter
qui est complètement différente de la méthode:et ne bénéficie pas de SQL optimisations.
OriginalL'auteur user6910411
J'ai été dans cette situation et se sont installés à l'aide d'un UDF:
Plus lisible serait d'utiliser une définition de fonction normale au lieu de la lambda
OriginalL'auteur architectonic
convertir le dataframe en rdd.
Je pense que ça peut fonctionner!
OriginalL'auteur Ashok v