Создать nxn матрицу из pyspark datafame - PullRequest
1 голос
/ 20 марта 2020

Я новичок в pyspark. У меня есть 10k текстовых данных. Я создаю расстояние Жакара, используя Minha sh l sh. вывод, который я получил, например,

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. Я ценю предложения.

1 Ответ

1 голос
/ 21 марта 2020

Это можно сделать с помощью кода ниже. Тем не менее, это будет очень вычислительно интенсивно из-за groupBy, pivots, union и затем снова groupBy. Два groupBy pivots существуют потому, что в ваших данных есть две комбинации 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|
+----+----+----+----+
...