根据另一个数据帧过滤 pyspark 数据帧

Posted

技术标签:

【中文标题】根据另一个数据帧过滤 pyspark 数据帧【英文标题】:Filter pyspark dataframe based on another dataframe 【发布时间】:2020-12-30 06:49:56 【问题描述】:

我需要帮助,因为我想从一个数据帧中过滤一些数据作为另一个数据帧的标准,但我不想使用 SQL 命令。

df1

id ; create ; change ; name
1  ;2020-12-01;;Paul
2  ;2020-12-02;;Mary
3  ;2020-12-03;;David
4  ;2020-12-04;;Marley


df2
id ; create ; change ; name
1  ;2020-12-01;2020-12-30;Paul
2  ;2020-12-02;;Mary
3  ;2020-12-03;;David
4  ;2020-12-04;2020-12-30;Marley
5  ;2020-12-30;;Ted

df3

我想使用以下规则创建 df3 数据框,其中包含更改的 id (df2) 预先填充了日期 2020-12-30 并且存在 在 df1 中不要插入到 df3 中

id ; create ; change ; name
2  ;2020-12-02;;Mary
3  ;2020-12-03;;David

【问题讨论】:

【参考方案1】:

您可以先将df2df1 进行半联接,然后过滤change 列。

df3 = df2.join(df1, ['id', 'create', 'name'], 'semi') \
         .filter("change is null or change != '2020-12-30'") \
         .select('id', 'create', 'change', 'name')

df3.show()
+---+----------+------+-----+
| id|    create|change| name|
+---+----------+------+-----+
|  2|2020-12-02|  null| Mary|
|  3|2020-12-03|  null|David|
+---+----------+------+-----+

【讨论】:

以上是关于根据另一个数据帧过滤 pyspark 数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark:根据多个条件过滤数据帧

Pyspark 数据帧过滤语法错误

Pyspark数据帧:根据另一列的值提取列

将 pyspark 数据帧与另一个数据帧进行比较

如果包含字符串列表,则过滤 pyspark 数据帧

Pyspark 忽略 pyspark-sql-functions 中数据帧的过滤