python - PySpark:类型错误:条件应该是字符串或列

标签 python apache-spark dataframe pyspark apache-spark-sql

我正在尝试过滤 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.filterDataFrame.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/

相关文章:

python - 从不同大小的 numpy 数组创建 pandas 数据框

python - 在 python reportlab 中循环遍历一个表

python - 如何通过 bool 列过滤 Spark 数据帧?

python - Django 全文搜索不匹配部分单词

python - get_dummies(),异常 : Data must be 1-dimensional

scala - 通过使用数据帧中多个其他列的值向数据帧添加新列 - spark/scala

scala - Spark MLib Word2Vec 错误 : The vocabulary size should be > 0

r - 将新的(较短的)列添加到 tibble 并扩展 tibble 以保持整洁

R:将行/列索引的数据框转换为矩阵

python - 列表的 boolean 掩码作为 Pandas 数据框中的条目