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 过滤器未按预期工作。“列”对象不可调用的主要内容,如果未能解决你的问题,请参考以下文章

VUE3 复合过滤器未按预期工作

从 views_php 过滤器返回 TRUE 未按预期工作

Oauth2 安全配置匹配器请求过滤未按预期工作

CollectionView 未按预期显示 3 列

MultiResourceItemReader 未按预期工作

Nativescript-vue $emit 未按预期工作