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

时间:2020-04-18 21:25:37

标签: pyspark aws-glue pyspark-dataframes

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

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

我有一个值为[“ SFO”,“ LA”,“ NYC”]的数组。我想将此数组作为新列添加到数据框,如下所示:

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

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

1 个答案:

答案 0 :(得分:1)

您可以使用 array 功能并在 * 中加星标 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|
#+--------+----+----+