У меня есть два DataFrames:
df1=
+---+----------+
| id|filter |
+---+----------+
| 1| YES|
| 2| NO|
| 3| NO|
+---+----------+
df2 =
+--------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15|
+--------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|XXXXXX |NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|
+--------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|YYYYYY |NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|NaN|
+--------------------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Я хочу создать новый столбец в df1, фильтруя имя поля в df2 на основе значения строки df1. Мой результат будет таким:
df3 =
+---+----------+----------------+
| id|filter | value |
+---+----------+----------------+
| 1| YES|[XXXXXX, YYYYYY]|
| 2| NO| [] |
| 3| NO| [] |
+---+----------+----------------+
Я знаю, как это сделать с Pandas, но не знаю, как это сделать с PySpark.
Я пробовал следующее, но похоже, что это не работает:
df3 = df1.withColumn('value', f.when(df1['filter'] == 'YES', df2.select(f.col('id')).collect()).otherwise(f.lit([]))
Большое тебе спасибо