在 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|
#+--------+----+----+
我有一个像这样的 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|
#+--------+----+----+