在 Pyspark 中,如何将值列表作为新列添加到现有 Dataframe?

In Pyspark, how to add a list of values as a new column to an existing Dataframe?

我有一个像这样的 Pyspark 数据框:

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

我有一个数组,其值为 ["SFO"、"LA"、"NYC"]。我想将此数组作为新列添加到 Dataframe,如下所示:

#+--------+----+--------------+
#|    col1|col2|          col3|
#+--------+----+--------------+
#|   Apple|   A|SFO           |
#|  Google|   G|LA            |
#|Facebook|   F|NYC           |
#+--------+----+--------------+

如何在 Pyspark 中做到这一点?我不应该在我的解决方案中使用 Pandas。

您可以使用 array 函数并在其中加注星号 * 用 [=19 扩展您的列表=]lit 将您的列表放在新列的每一行中。然后,您可以使用 row_number() 计算将其结果发送到 element_at(Spark2.4+)

from pyspark.sql import functions as F
from pyspark.sql.window import Window

w=Window().orderBy("col3")
arr=["SFO","LA","NYC"]

df.withColumn("col3", F.array(*[F.lit(x) for x in arr]))\
  .withColumn("rownum", F.row_number().over(w))\
  .withColumn("col3", F.expr("""element_at(col3,rownum)""")).drop("rownum").show()

#+--------+----+----+
#|    col1|col2|col3|
#+--------+----+----+
#|   Apple|   A| SFO|
#|  Google|   G|  LA|
#|Facebook|   F| NYC|
#+--------+----+----+