火花过滤器无法正常工作。“列”对象不可调用

时间:2019-04-23 00:48:02

标签: apache-spark dataframe filter pyspark pyspark-sql

在Spark Dataframe的过滤器中使用“ and”子句时,它将返回Spark.SQL.Column而不是Spark Dataframe。但对于一种情况,它可以正常工作。

如何show()或通过Spark Sql Column对象进行迭代? 尝试使用show()函数会引发错误-'Column' object not callable.

或者如何将Spark.SQL.Column转换为Spark Dataframe?还是如何在filter子句中通过多个条件?

df2 = df.filter((df.dropoff_longitude >= -65.09)&(df.dropoff_longitude <= -63.000))

1 个答案:

答案 0 :(得分:0)

根据pyspark official doc

您可以使用df.filter或df.where通过过滤条件 为您的示例传递多个条件

df.filter("dropoff_longitude >= -65.09 and df.dropoff_longitude <= -63.000")
df.where("dropoff_longitude >= -65.09 and df.dropoff_longitude <= -63.000")  # SQL String

from pyspark.sql.functions import col
df.filter(col("dropoff_longitude) >= -65.09) & (col(dropoff_longitude) <= -63.000))

说话表演。

df.dropoff_longitude.show()  # this reports an error
df.select("dropoff_longitude").show()  # this line works

因为.show是spark.sql.dataframe的属性/功能,而不是spark.sql.columns

因此,如果您的转换返回spark列,则.show将不起作用
但是如果您的转换返回到另一个数据框,那么.show应该可以工作