Pyspark 将密集列向量转换为行

Pyspark 将密集列向量转换为行,pyspark,apache-spark-sql,melt,Pyspark,Apache Spark Sql,Melt,我有一个3列的数据框,每个条目都是相同长度的密集向量。 如何融化矢量条目 当前数据帧: 第1列|第2列| [1.0,2.0,3.0]|[10.0,4.0,3.0] [5.0,4.0,3.0]|[11.0,26.0,3.0] [9.0,8.0,7.0]|[13.0,7.0,3.0] 预期: 第1列|第2列 1.0。10.0 2.0。4.0 3.0。3.0 5.0。11.0 4.0。26.0 3.0。3.0 9.0。13.0 步骤1:让我们创建初始数据帧: myValues = [([1.0,2.

我有一个3列的数据框,每个条目都是相同长度的密集向量。 如何融化矢量条目

当前数据帧:

第1列|第2列|

[1.0,2.0,3.0]|[10.0,4.0,3.0]

[5.0,4.0,3.0]|[11.0,26.0,3.0]

[9.0,8.0,7.0]|[13.0,7.0,3.0]

预期:

第1列|第2列

1.0。10.0

2.0。4.0

3.0。3.0

5.0。11.0

4.0。26.0

3.0。3.0

9.0。13.0


步骤1:让我们创建初始数据帧:

myValues = [([1.0,2.0,3.0],[10.0,4.0,3.0]),([5.0,4.0,3.0],[11.0,26.0,3.0]),([9.0,8.0,7.0],[13.0,7.0,3.0])]
df = sqlContext.createDataFrame(myValues,['column1','column2'])
df.show()
+---------------+-----------------+
|        column1|          column2|
+---------------+-----------------+
|[1.0, 2.0, 3.0]| [10.0, 4.0, 3.0]|
|[5.0, 4.0, 3.0]|[11.0, 26.0, 3.0]|
|[9.0, 8.0, 7.0]| [13.0, 7.0, 3.0]|
+---------------+-----------------+
第2步:现在,
分解两列,但是在我们
zip
数组之后。在这里,我们知道
list/array
的长度是3

from pyspark.sql.functions import array, struct
tmp = explode(array(*[
    struct(col("column1").getItem(i).alias("column1"), col("column2").getItem(i).alias("column2"))
    for i in range(3)
]))
df=(df.withColumn("tmp", tmp).select(col("tmp").getItem("column1").alias('column1'), col("tmp").getItem("column2").alias('column2')))
df.show()
+-------+-------+
|column1|column2|
+-------+-------+
|    1.0|   10.0|
|    2.0|    4.0|
|    3.0|    3.0|
|    5.0|   11.0|
|    4.0|   26.0|
|    3.0|    3.0|
|    9.0|   13.0|
|    8.0|    7.0|
|    7.0|    3.0|
+-------+-------+

非常感谢。这真的很有帮助,不用担心。你能接受这个答案吗?