Графики создают график с использованием столбца списка

У меня есть следующий фрейм данных, который состоит из вершин (индекса) и всех ребер этой вершины: версия 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 ребер), есть ли способ сделать ее более эффективной?


person Acha954    schedule 25.04.2020    source источник
comment
какая у вас версия Spark?   -  person jxc    schedule 25.04.2020
comment
я использую graphframes версии 0.6 и pypark 2.4.4   -  person Acha954    schedule 25.04.2020
comment
До версии Spark 2.3.0 это известная проблема: issues.apache.org/jira/ просмотреть / SPARK-21657. Но это не ваш случай, вы можете настроить конфигурации кластера, например: stackoverflow.com/questions/52777421/. Другой вариант - использовать flatMap, например: edges = df.rdd.flatMap(lambda x: [(x['index'], e) for e in x.temp_index ]).toDF(['dst', 'src'])   -  person jxc    schedule 28.04.2020