arrays_zip 函数,压缩两个数组列并创建一个数组结构。
from pyspark.sql import functions as F
data = [("A", [1, 4], [0.9, 0.2],),
("B", [5, 7], [0.1, 0.5],), ]
df = spark.createDataFrame(data, ("id", "sub_id", "score", ))
result = df.withColumn("result", F.arrays_zip(F.col("sub_id").alias("id"), F.col("score")))
result.printSchema()
result.show()
输出
root
|-- id: string (nullable = true)
|-- sub_id: array (nullable = true)
| |-- element: long (containsNull = true)
|-- score: array (nullable = true)
| |-- element: double (containsNull = true)
|-- result: array (nullable = true)
| |-- element: struct (containsNull = false)
| | |-- id: long (nullable = true)
| | |-- score: double (nullable = true)
+---+------+----------+--------------------+
| id|sub_id| score| result|
+---+------+----------+--------------------+
| A|[1, 4]|[0.9, 0.2]|[{1, 0.9}, {4, 0.2}]|
| B|[5, 7]|[0.1, 0.5]|[{5, 0.1}, {7, 0.5}]|
+---+------+----------+--------------------+