Как вычислить сходство между каждыми двумя ключами в фрейме данных pyspark? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть датафрейм с двумя вершинами столбца и весом

----------------
vertex| weight
----------------
a     | w1
b     | w2
..    | ...
x     | wz
----------------

Я ищу вычислительное сходство между каждыми двумя вершинами. Другими словами, я ищу новый фрейм данных:

   -------------------------
    vertex1| vertex2| weight
    ------------------------
    a     | b       | w1+w2
    a     | c       | w1+w3
    ..    | ...
    a     | x       | w1+wx
    b     | a       | w2+w1
    b     | c       | w2+w3
    ....  
    -----------------------

есть предложения сделать это, плз?

1 Ответ

1 голос
/ 10 мая 2019

Простым решением является join датафрейм с самим собой при условии, что vertex отличается. Наивной реализации может понравиться следующее:

df1 = df.select(col("vertex").alias("vertex1"), col("weight").alias("weight1"))
df2 = df.select(col("vertex").alias("vertex2"), col("weight").alias("weight2"))
result =  df1.join(df2, col('vertex1') != col('vertex2'))\
             .withColumn('weight', df1['weight1'] + df2['weight2'])\
             .select(col('vertex1'), col('vertex2'), col('weight))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...