PySpark:TypeError:条件应为字符串或列

新手上路,请多包涵

我正在尝试过滤基于如下的 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

知道我错过了什么吗?谢谢!

原文由 Edamame 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 666
1 个回答

DataFrame.filterDataFrame.where 的别名,期望 SQL 表达式表示为 Column

 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 优化。

原文由 zero323 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题