как сделать множественные array_union и array_intersection в pyspark - PullRequest
0 голосов
/ 31 октября 2019

Допустим, у меня есть фрейм данных pyspark, содержащий следующие столбцы: c1, c2, c3, c4 и c5 типа массива. Теперь, если я хочу сделать: (c1) пересечение (c2 union c3) пересечение (c2 union c4 union c5)

Я могу использовать array_union для двух столбцов в цикле и продолжать добавлять столбец с помощью withColumnа затем сделать круг пересечения аналогичным образом.

Как я могу эффективно сделать это в PySpark? Есть ли более умный способ сделать это?

1 Ответ

0 голосов
/ 31 октября 2019

вам не нужно использовать цикл, у вас может быть только один большой оператор withColumn. Это также должен быть самый быстрый вариант, поскольку вы используете только встроенные функции spark.

from pyspark.sql import functions as f
df = df.withColumn("crazy_set_operation",
                    f.array_intersect(f.col("c1"),
                                      f.array_intersect(
                                          f.array_union(f.col("c2"), f.col("c3")),
                                          f.array_union(f.array_union(f.col("c2"), F.col("c4")), f.col("c5"))
                                          )
                                      )
                   )

...