Как объединить два фрейма данных в pyspark, когда один столбец является массивом, а другой столбец является строкой? - PullRequest
0 голосов
/ 09 апреля 2020

df1:

+---+------+
| id|  code|
+---+------+
|  1|[A, F]|
|  2|   [G]|
|  3|   [A]|
+---+------+

df2:

+--------+----+
|    col1|col2|
+--------+----+
|   Apple|   A|
|  Google|   G|
|Facebook|   F|
+--------+----+

Я хочу, чтобы df3 был таким, используя столбцы df1 и df2:

+---+------+-----------------+
| id|  code|          changed|
+---+------+-----------------+
|  1|[A, F]|[Apple, Facebook]|
|  2|   [G]|         [Google]|
|  3|   [A]|          [Apple]|
+---+------+-----------------+

Я знаю, что это может быть заархивировано, если столбец кода НЕ является массивом. Я не знаю, как перебрать массив кода для этой цели.

1 Ответ

0 голосов
/ 10 апреля 2020

Попробуйте:

from pyspark.sql.functions import *
import pyspark.sql.functions as f

res=(df1
     .select(f.col("id"), f.explode(f.col("code")).alias("code"))
     .join(df2, f.col("code")==df2.col2)
     .groupBy("id")
     .agg(f.collect_list(f.col("code")).alias("code"), f.collect_list(f.col("col1")).alias("changed"))
)
...