如何根据来自其他 pyspark 数据帧的日期值过滤第二个 pyspark 数据帧?
Posted
技术标签:
【中文标题】如何根据来自其他 pyspark 数据帧的日期值过滤第二个 pyspark 数据帧?【英文标题】:How to filter a second pyspark dataframe based on date value from other pyspark dataframe? 【发布时间】:2019-11-12 09:44:49 【问题描述】:我有一个填充了 load_date_time 的 DataFrame。我想用其他数据帧中的 max(date_value) 过滤这个数据帧。
我已尝试执行以下操作。
df2_max_create_date = df2.select("create_date").agg(F.max(df_dsa["create_date"]))
df2_max_create_date.show()
+----------------+
|max(create_date)|
+----------------+
| 2019-11-10|
+----------------+
然后尝试根据此日期过滤第一个数据帧。它有一个名为 load_date_time 的时间戳列。
df_delta = df1.where(F.col('load_date_time') > (F.lit(df2_max_create_date)))
但我遇到了错误。
AttributeError: 'DataFrame' object has no attribute '_get_object_id'
【问题讨论】:
只需使用join
。 df_delta = df1.alias("l").crossJoin(df2_max_create_date).where(F.col("load_date_time") > F.col("max(create_date)")).select("l.*")
.
像魅力一样工作。
【参考方案1】:
你可以通过调用collect
获取max_date
变量:
max_create_date = df2.select(F.max(df_dsa["create_date"])).collect()[0][0]
df_delta = df1.where(F.col('load_date_time') > max_create_date)
【讨论】:
仅供参考:使用join
几乎总是优于collect
@pault 知道了!我也明白为什么。
为什么在 collect() 上使用交叉连接更划算?
@anidev711 Collect 是一个动作,而 join 是一个转换。阅读此问答***.com/questions/44174747/…以上是关于如何根据来自其他 pyspark 数据帧的日期值过滤第二个 pyspark 数据帧?的主要内容,如果未能解决你的问题,请参考以下文章
(运行的干净代码)根据来自另一个数据帧的日期间隔和字符串条件获取一个数据帧中的值的平均值