У меня есть следующий фрейм данных, который состоит из вершин (индекса) и всех ребер этой вершины: версия Spark: 2.4 / graphframe 0.6
+-----+------------+
|index| temp_index|
+-----+------------+
|364|[16, 28, 169..|
| 18|[18, 19, 45...|
|362|[3, 21, 22,...|
| 64|[39, 64, 211..|
| 82|[35, 43, 46...|
|281|[2, 91, 102...|
+-----+------------+
И я хочу создать из него граф с помощью Spark. Метод, который я использовал, заключался в том, чтобы взорвать все списки, а затем переименовать фрейм данных и, таким образом, создать все края.
column = ['temp_index']
vertices = df.drop(*column).withColumnRenamed('index', 'id')
df= df.withColumn('temp_index', explode('temp_index'))
edges = df.withColumnRenamed('index', 'src').withColumnRenamed('temp_index', 'dst')
g = GraphFrame(vertices, edges)
Для небольших наборов данных он работает нормально, но для больших наборов данных функция разнесения выполняется довольно медленно (каждый из этих списков содержит до 1 000 000 ребер), есть ли способ сделать ее более эффективной?
edges = df.rdd.flatMap(lambda x: [(x['index'], e) for e in x.temp_index ]).toDF(['dst', 'src'])
- person jxc   schedule 28.04.2020