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

时间:2020-12-30 06:49:56

标签: amazon-web-services apache-spark pyspark apache-spark-sql

我需要帮助,因为我想从一个数据框中过滤一些数据作为另一个数据框的标准,但我不想使用 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 个答案:

答案 0 :(得分:2)

您可以先将 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|
+---+----------+------+-----+