如何根据不同数据帧的列值从pyspark数据帧中过滤掉行
How to filter out rows from pyspark dataframe based on values of columns of different dataframe
我有一个 PySpark 数据框 df1-
data1 = [(("u1", 'w1', 20)), (("u2", 'w1', 30)), (("u3", 'w2', 40))]
df1 = spark.createDataFrame(data, ["ID", "week", "var"])
df1.show()
+---+----+---+
| ID|week|var|
+---+----+---+
| u1| w1| 20|
| u2| w1| 30|
| u3| w2| 40|
+---+----+---+
我有另一个 PySpark 数据框 df2-
data2 = [(("u1", 'w1', 20)), (("u1", 'w2', 10)), (("u2", 'w1', 30)), (("u3", 'w2', 40)), (("u3", 'w2', 50)), (("u4", 'w1', 100)), (("u4", 'w2', 0))]
df2 = spark.createDataFrame(data2, ["ID", "week", "var"])
df2.show()
+---+----+---+
| ID|week|var|
+---+----+---+
| u1| w1| 20|
| u1| w2| 10|
| u2| w1| 30|
| u3| w2| 40|
| u3| w2| 50|
| u4| w1|100|
| u4| w2| 0|
+---+----+---+
我只想保留 df1.ID
中存在 df2.ID 的 df2 行
期望的输出是-
+---+----+---+
| ID|week|var|
+---+----+---+
| u1| w1| 20|
| u1| w2| 10|
| u2| w1| 30|
| u3| w2| 40|
| u3| w2| 50|
+---+----+---+
我该如何完成?
这种匹配记录条件可以使用left_semi
join
df3 = df2.join(d1,df2.ID == df1.ID, 'left_semi')
df3 将包含 df2 的所有记录(所有列),这些记录在 df1 中具有 匹配的复合键 .
我有一个 PySpark 数据框 df1-
data1 = [(("u1", 'w1', 20)), (("u2", 'w1', 30)), (("u3", 'w2', 40))]
df1 = spark.createDataFrame(data, ["ID", "week", "var"])
df1.show()
+---+----+---+
| ID|week|var|
+---+----+---+
| u1| w1| 20|
| u2| w1| 30|
| u3| w2| 40|
+---+----+---+
我有另一个 PySpark 数据框 df2-
data2 = [(("u1", 'w1', 20)), (("u1", 'w2', 10)), (("u2", 'w1', 30)), (("u3", 'w2', 40)), (("u3", 'w2', 50)), (("u4", 'w1', 100)), (("u4", 'w2', 0))]
df2 = spark.createDataFrame(data2, ["ID", "week", "var"])
df2.show()
+---+----+---+
| ID|week|var|
+---+----+---+
| u1| w1| 20|
| u1| w2| 10|
| u2| w1| 30|
| u3| w2| 40|
| u3| w2| 50|
| u4| w1|100|
| u4| w2| 0|
+---+----+---+
我只想保留 df1.ID
中存在 df2.ID 的 df2 行期望的输出是-
+---+----+---+
| ID|week|var|
+---+----+---+
| u1| w1| 20|
| u1| w2| 10|
| u2| w1| 30|
| u3| w2| 40|
| u3| w2| 50|
+---+----+---+
我该如何完成?
这种匹配记录条件可以使用left_semi
join
df3 = df2.join(d1,df2.ID == df1.ID, 'left_semi')
df3 将包含 df2 的所有记录(所有列),这些记录在 df1 中具有 匹配的复合键 .