在Pyspark中,如何将值列表作为新列添加到现有数据帧中?
我有一个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
+--------+----+
| 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如果我的更新解决方案解决了它