我正在尝试过滤 RDD,如下所示:
spark_df = sc.createDataFrame(pandas_df)
spark_df.filter(lambda r: str(r['target']).startswith('good'))
spark_df.take(5)
但出现以下错误:
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
知道我错过了什么吗?谢谢!
最佳答案
DataFrame.filter
是 DataFrame.where
的别名,需要一个表示为 Column
的 SQL 表达式:
spark_df.filter(col("target").like("good%"))
或等效的 SQL 字符串:
spark_df.filter("target LIKE 'good%'")
我相信您在这里尝试使用 RDD.filter
这是完全不同的方法:
spark_df.rdd.filter(lambda r: r['target'].startswith('good'))
并且不会从 SQL 优化中受益。
关于python - PySpark:类型错误:条件应该是字符串或列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52675628/