从pyspark datafame创建nxn矩阵

从pyspark datafame创建nxn矩阵,pyspark,pyspark-dataframes,Pyspark,Pyspark Dataframes,我对派斯帕克很陌生。我有10k文本数据集。我使用Minhash lsh创建Jaccard距离。 例如,我得到的输出 col1 col2 dist A B 0.77 B C 0.56 C A 0.88 我想把它转换成NxN矩阵格式 A B C A 0 0.77 0.88 B 0.77 0 0.56 C 0.88 0.56 0 有没有办法用pyspark

我对派斯帕克很陌生。我有10k文本数据集。我使用Minhash lsh创建Jaccard距离。 例如,我得到的输出

col1 col2 dist
A   B       0.77
B   C       0.56
C   A       0.88
我想把它转换成NxN矩阵格式

    A        B      C
A   0       0.77    0.88

B   0.77     0      0.56

C   0.88    0.56    0
有没有办法用pyspark创建这个。
非常感谢您的建议。

可以使用下面的代码来完成。但是,由于使用了
groupBy
pivots
union
以及
groupBy
,因此计算量非常大。存在两个groupBy枢轴,因为数据中有两种组合
A-B
B-A

df1=df.groupBy("col1").pivot("col2").agg(F.first("dist")).orderBy("col1")
df2=df.groupBy(F.col("col2").alias("col1")).pivot("col1").agg(F.first("dist")).orderBy("col1")
df3=df1.union(df2)
df3.groupBy("col1")\
.agg(*(F.first(x,True).alias(x) for x in df3.columns if x != 'col1'))\
.fillna(0)\
.orderBy("col1")\
.show()

+----+----+----+----+
|col1|   A|   B|   C|
+----+----+----+----+
|   A| 0.0|0.77|0.88|
|   B|0.77| 0.0|0.56|
|   C|0.88|0.56| 0.0|
+----+----+----+----+

非常感谢。这是一个3个值(a、B、C)的示例,当我有更多的值时,如何执行此操作,在最后一节df3中,其中.agg正在添加值。您可以使用以下内容:.agg(*(F.first(x,True).别名(x)表示df3中的x.columns,如果x!=“col1”)。我已经更新了解决方案