У меня есть фрейм данных 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|
+---+----+---+
Я хочу сохранить только те строки df2, для которых df2.ID присутствует в df1.ID.
Желаемый результат -
+---+----+---+
| ID|week|var|
+---+----+---+
| u1| w1| 20|
| u1| w2| 10|
| u2| w1| 30|
| u3| w2| 40|
| u3| w2| 50|
+---+----+---+
Как я могу это сделать?
вы можете использовать left_semi
соединение для такого условия соответствия записи.
df3 = df2.join(d1,df2.ID == df1.ID, 'left_semi')
df3 будет содержать все записи df2 (все столбцы), которые имеют соответствующий составной ключ в df1.
Я как бы решил проблему, но я не уверен, что это правильный способ сделать это. Может ли кто-нибудь просмотреть мое решение? ` df_new = df1.join(df2, df1['ID']==df2['ID'], 'inner').select(df2.ID, df2.week, df2.var) df_new.show() `