Как найти членство вершин, используя Graphframes или igraph или networx в pyspark - PullRequest
0 голосов
/ 10 июня 2019

мой входной фрейм данных df

    valx      valy 
1: 600060     09283744
2: 600131     96733110 
3: 600194     01700001

и я хочу создать граф, обработанный над двумя столбцами, это edgelist, и тогда мой вывод должен иметь список всех вершин графа с его членством.

Я пробовал Graphframes в библиотеке pyspark и networx, но не получаю желаемых результатов

Мой вывод должен выглядеть следующим образом (это в основном все valx и valy в V1 (как вершины) и информация об их членстве в V2)

V1               V2
600060           1
96733110         1
01700001         3

Я попробовал ниже

import networkx as nx
import pandas as pd

filelocation = r'Pathtodataframe df csv'

Panda_edgelist = pd.read_csv(filelocation)

g = nx.from_pandas_edgelist(Panda_edgelist,'valx','valy')
g2 = g.to_undirected(g)
list(g.nodes)
``

1 Ответ

1 голос
/ 11 июня 2019

Я не уверен, что вы нарушаете какие-либо правила, задавая один и тот же вопрос два раза .

Чтобы обнаружить сообщества с графическими фреймами, сначала вам нужно создать объект графических фреймов. Дайте вашему примеру dataframe следующий фрагмент кода, показывающий необходимые преобразования:

from graphframes import *

sc.setCheckpointDir("/tmp/connectedComponents")


l = [
(  '600060'  , '09283744'),
(  '600131'  , '96733110'),
(  '600194'  , '01700001')
]

columns = ['valx', 'valy']

#this is your input dataframe 
edges = spark.createDataFrame(l, columns)

#graphframes requires two dataframes: an edge and a vertice dataframe.
#the edge dataframe has to have at least two columns labeled with src and dst.
edges = edges.withColumnRenamed('valx', 'src').withColumnRenamed('valy', 'dst')
edges.show()

#the vertice dataframe requires at least one column labeled with id
vertices = edges.select('src').union(edges.select('dst')).withColumnRenamed('src', 'id')
vertices.show()

g = GraphFrame(vertices, edges)

Выход:

+------+--------+ 
|   src|     dst| 
+------+--------+ 
|600060|09283744| 
|600131|96733110| 
|600194|01700001| 
+------+--------+ 
+--------+ 
|      id| 
+--------+ 
|  600060| 
|  600131| 
|  600194| 
|09283744| 
|96733110| 
|01700001| 
+--------+

Вы написали в комментариях к своему другому вопросу , что алгоритм обнаружения сообщества в настоящее время не имеет значения для вас. Поэтому я выберу подключенные компоненты :

result = g.connectedComponents()
result.show()

Выход:

+--------+------------+ 
|      id|   component| 
+--------+------------+ 
|  600060|163208757248| 
|  600131| 34359738368| 
|  600194|884763262976| 
|09283744|163208757248| 
|96733110| 34359738368| 
|01700001|884763262976| 
+--------+------------+

Другие алгоритмы обнаружения сообщества (например, LPA) можно найти в руководстве пользователя .

...