Spark 过滤器未按预期工作。“列”对象不可调用
Posted
技术标签:
【中文标题】Spark 过滤器未按预期工作。“列”对象不可调用【英文标题】:Spark filter not working as expected.. 'Column' object is not callable 【发布时间】:2019-04-23 00:48:02 【问题描述】:在 Spark Dataframe 的过滤器中使用“and”子句时,它返回 Spark.SQL.Column
而不是 Spark Dataframe
。但对于一种情况,它可以正常工作。
如何show()
或遍历Spark Sql Column对象?
当尝试 show()
函数时抛出错误 - 'Column' object not callable.
或者如何将Spark.SQL.Column
转换为 Spark Dataframe?或者如何在过滤子句中传递多个条件?
df2 = df.filter((df.dropoff_longitude >= -65.09)&(df.dropoff_longitude <= -63.000))
【问题讨论】:
【参考方案1】:根据pysparkofficial 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 应该可以工作
【讨论】:
以上是关于Spark 过滤器未按预期工作。“列”对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章