将列附加到 pyspark 数据框中的数组

Append column to an array in a pyspark dataframe

我有一个包含 2 列的数据框

| VPN    | UPC             |
+--------+-----------------+
| 1      | [4,2]           |
| 2      | [1,2]           |
| null   | [4,7]           |

我需要一个结果列,其中 vpn(字符串)的值附加到数组 UPC。结果应该如下所示。

| result |
+--------+
| [4,2,1]|
| [1,2,2]|
| [4,7,] |

一种选择是使用 concat + array。先用arrayVPN列转成数组类型,然后用concat方法拼接两个数组列:

df = spark.createDataFrame([(1, [4, 2]), (2, [1, 2]), (None, [4, 7])], ['VPN', 'UPC'])

df.show()
+----+------+
| VPN|   UPC|
+----+------+
|   1|[4, 2]|
|   2|[1, 2]|
|null|[4, 7]|
+----+------+

df.selectExpr('concat(UPC, array(VPN)) as result').show()
+---------+
|   result|
+---------+
|[4, 2, 1]|
|[1, 2, 2]|
|  [4, 7,]|
+---------+

或更多 pythonic:

from pyspark.sql.functions import array, concat

df.select(concat('UPC', array('VPN')).alias('result')).show()
+---------+
|   result|
+---------+
|[4, 2, 1]|
|[1, 2, 2]|
|  [4, 7,]|
+---------+