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

在Pyspark中,如何将值列表作为新列添加到现有数据帧中?,pyspark,aws-glue,pyspark-dataframes,Pyspark,Aws Glue,Pyspark Dataframes,我有一个Pyspark数据帧,如下所示: +--------+----+ | col1|col2| +--------+----+ | Apple| A| | Google| G| |Facebook| F| +--------+----+ #+--------+----+--------------+ #| col1|col2| col3| #+--------+----+--------------+ #| Apple| A|SFO

我有一个Pyspark数据帧,如下所示:

+--------+----+
|    col1|col2|
+--------+----+
|   Apple|   A|
|  Google|   G|
|Facebook|   F|
+--------+----+
#+--------+----+--------------+
#|    col1|col2|          col3|
#+--------+----+--------------+
#|   Apple|   A|SFO           |
#|  Google|   G|LA            |
#|Facebook|   F|NYC           |
#+--------+----+--------------+
我有一个值为[“SFO”、“LA”、“NYC”]的数组。我想将此数组作为新列添加到Dataframe,如下所示:

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

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

您可以使用
数组
函数和星号
*
使用
lit
扩展列表,将您的列表放入新列的每一行。然后,您可以使用
行数()
计算将计算结果发送到
处的
元素
(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|
#+--------+----+----+

嗨,穆罕默德,我更新了上面的问题。我加了我想要的颜色。@srinin我明白了。lmk如果我的更新解决方案解决了它