如何根据不同dataframe列的值从pyspark dataframe中筛选出行

如何根据不同dataframe列的值从pyspark dataframe中筛选出行,dataframe,join,pyspark,apache-spark-sql,pyspark-dataframes,Dataframe,Join,Pyspark,Apache Spark Sql,Pyspark Dataframes,我有一个PySpark数据帧df1- data1 = [(("u1", 'w1', 20)), (("u2", 'w1', 30)), (("u3", 'w2', 40))] df1 = spark.createDataFrame(data, ["ID", "week", "var"]) df1.show() +---+----+---+ | ID|week|var| +--

我有一个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\u semi
join

df3 = df2.join(d1,df2.ID == df1.ID, 'left_semi')

df3将包含df2的所有记录(所有列),这些记录在df1中有一个匹配的复合键。

对于这种匹配记录条件,您可以使用
left\u semi
join

df3 = df2.join(d1,df2.ID == df1.ID, 'left_semi')

df3将包含df2的所有记录(所有列),这些记录在df1中有一个匹配的复合键。

我解决了这个问题,但我不确定这样做是否正确。有人能看看我的解决方案吗?`df_new=df1.join(df2,df1['ID']==df2['ID'],'internal')。选择(df2.ID,df2.week,df2.var)df_new.show()`我解决了一些问题,但我不确定这样做是否正确。有人能看看我的解决方案吗?`df_new=df1.join(df2,df1['ID']==df2['ID'],'internal')。选择(df2.ID,df2.week,df2.var)dfu new.show()`