【发布时间】:2018-06-30 22:34:38
【问题描述】:
我想在现有数据框中添加一个新列。下面是我的数据框 -
+---+---+-----+
| x1| x2| x3|
+---+---+-----+
| 1| a| 23.0|
| 3| B|-23.0|
+---+---+-----+
我可以像这样添加df = df.withColumn("x4", lit(0))
+---+---+-----+---+
| x1| x2| x3| x4|
+---+---+-----+---+
| 1| a| 23.0| 0|
| 3| B|-23.0| 0|
+---+---+-----+---+
但我想在我的 df 中添加一个数组列表。
假设 [0,0,0,0] 是我要添加的数组,添加后我的 df 将如下所示 -
+---+---+-----+---------+
| x1| x2| x3| x4|
+---+---+-----+---------+
| 1| a| 23.0|[0,0,0,0]|
| 3| B|-23.0|[0,0,0,0]|
+---+---+-----+---------+
我试过这样 -
array_list = [0,0,0,0]
df = df.withColumn("x4", lit(array_list))
但是报错了
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.sql.functions.lit.
: java.lang.RuntimeException: Unsupported literal type class java.util.ArrayList [0, 0, 0, 0, 0, 0]
有人知道怎么做吗?
【问题讨论】:
-
也许是
df.withColumn("some_array", array(lit(0), lit(0), lit(0), lit(0))? src -
但是如果我必须向不同的行添加不同的值怎么办。这不是永久的解决方案。
-
如果你需要一个不同的值到不同的行,那么你可能需要使用
udf。 -
另一个想法是使用
when:df.withColumn('some_array', when((df.some_column==1), array(lit(0), lit(0), lit(0), lit(0)).otherwise(array(lit(1), lit(1), lit(1), lit(1)) -
你的数组依赖什么?
标签: apache-spark pyspark spark-dataframe pyspark-sql