从pyspark datafame创建nxn矩阵
我对派斯帕克很陌生。我有10k文本数据集。我使用Minhash lsh创建Jaccard距离。 例如,我得到的输出从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
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”)。我已经更新了解决方案