我想在现有数据框中添加新列。下面是我的数据框 -
+---+---+-----+
| 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]
有人知道怎么做吗?
答案 0 :(得分:0)
我的数组是可变的,我必须将它添加到具有不同值的多个地方。这种方法适用于添加相同的值或添加一个或两个数组。它不适合添加大量数据
我认为这是一个XY问题。如果你想要可扩展的解决方案(1000行不是很大,说实话),那么使用另一个数据帧并加入。例如,如果想通过x1
arrays = spark.createDataFrame([
(1, [0.0, 0.0, 0.0]), (3, [0.0, 0.0, 0.0])
], ("x1", "x4"))
df.join(arrays, ["x1"])
根据要求添加更复杂的条件。
要立即解决问题,请参阅How to add a constant column in a Spark DataFrame? - array
的所有元素都应为列
from pyspark.sql.functions import lit
array(lit(0.0), lit(0.0), lit(0.0))
# Column<b'array(0.0, 0.0, 0.0)'>