Spark graphX ​​делает RDD Edge / Vertex из фрейма данных - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть 2 больших фрейма данных, edge и vertex, и я знаю, что они должны быть в специальных типах Vertex и Edge RDD, но в каждом учебнике, который я нашел, указаны Edge иVertex СДР в виде массивов от 3 до 10 предметов.Мне нужно, чтобы они напрямую перешли из существенного СДР.Как бы я изменил тип данных / обычный RDD на правильный тип?

Я следовал примеру здесь: https://spark.apache.org/docs/latest/graphx-programming-guide.html#example-property-graph, но он перечисляет все отношения, и в моем случае их много.

  • edge df имеет 3 столбца, (sourceID, destID, отношение)

  • vertex df имеет 2 столбца (ID, имя)

То, что я пробовал до сих пор:

val vertex: RDD[(VertexId, String)] = sc.parallelize((vertexDF("ID"), vertexDF("Name")))

Возвращает ошибку:

error: type mismatch;
 found   : (org.apache.spark.sql.Column, org.apache.spark.sql.Column)
 required: Seq[(org.apache.spark.graphx.VertexId, String)]
    (which expands to)  Seq[(Long, String)]

Как изменить фрейм данных / обычный RDDв специализированные типы вершин / ребер RDD?

1 Ответ

0 голосов
/ 11 февраля 2019

Существует библиотека искр графических фреймов для обработки графиков на основе фреймов.У него есть метод для преобразования пары данных ребер и вершин в GraphX ​​RDD.См .: http://graphframes.github.io/graphframes/docs/_site/user-guide.html#example-conversions.

Для вашего примера это будет выглядеть так:

val edgeDf = .... // (sourceID, destID, relationship)
val verexDf = .... // (ID, Name)
import org.graphframes._
val g = GraphFrame(
  verexDf.select($"id", $"name"), 
  edgeDf.select ($"sourceID" as "src", $"destID" as "dst", $"relationship"))
// Convert to GraphX
val gx: Graph[Row, Row] = g.toGraphX
...