我有一个这样的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中做到这一点?我不应该在解决方案中使用熊猫。
答案 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|
#+--------+----+----+