如何将一项附加到数据框(spark 2.3)中的数组?
这是一个整数示例,但实际情况是struct。
输入:
+------+-------------+
| key| my_arr |
+------+-------------+
|5 |[3,14] |
|3 |[9,5.99] |
+------+-------------+
输出:
+-------------+
| my_arr |
+-------------+
|[3,14,5] |
|[9,5.99,3] |
+-------------+
答案 0 :(得分:1)
您必须创建udf来添加元素,整数很容易,但struct更容易 复杂。
带有整数的代码是:
`
for x in range(100):
if x%4 == 0:
print(x)
break
`
使用struct de code是:
`
val udfConcat = udf((key:Int,my_arr:WrappedArray[Int])=> my_arr:+key)
df.withColumn("my_arr",udfConcat(col("key"), col("my_arr"))).drop("key").show()
`
创建udf时,必须传递Array的de schema,在此示例中为具有名称和年龄的元素数组。
答案 1 :(得分:0)
这是使用Struct
的另一种方式:
输入:
df.show()
+---+--------+
|Key|My_Array|
+---+--------+
| 5| [3,14]|
| 3| [9,45]|
+---+--------+
df.withColumn("My_Array", struct($"My_Array.*", $"Key")).show(false)
输出:
+---+--------+
|Key|My_Array|
+---+--------+
|5 |[3,14,5]|
|3 |[9,45,3]|
+---+--------+
答案 2 :(得分:0)
没有UDF的解决方案-PYSPARK
我正面临类似的问题,并且由于性能下降,我绝对不想使用UDF
spark_df.show(3,False)
+---+-----------+
|key|myarr |
+---+-----------+
|5 |[3.0, 14.0]|
|3 |[9.0, 5.99]|
+---+-----------+
输出:
spark_df=spark_df.\
withColumn("myarr",F.split(F.concat(F.concat_ws(",",F.col("myarr")),F.lit(",") ,F.col("key")),",\s*" ) )
spark_df.select("myarr").show(3,False)
+------------+
|myarr |
+------------+
|[3.0,14.0,5]|
|[9.0,5.99,3]|
+------------+
方法步骤:
希望这会有所帮助。