GraphX ​​Edges с несколькими функциями - PullRequest
0 голосов
/ 07 июня 2018

Я работаю с Graphx и пытаюсь добавить элементы к краям.У меня есть CSV-файл с Id1, Id2, вес, тип

Я могу получить идентификаторы и одну функцию - либо вес, либо тип.Есть ли способ сохранить несколько функций для края.Вот фрагмент моего кода:

val edgesWriterWriterCollaborated: RDD[Edge[String]] = sc.textFile(edgeWeightedWriterWriterCollaborated).map {
  line =>
    val row = line.split(",")
    Edge(row(0).toLong, row(1).toLong, row(2))
}

Это дает мне ошибку:

val edgesWriterWriterCollaborated: RDD[Edge[Tuple2]] = sc.textFile(edgeWeightedWriterWriterCollaborated).map {
  line =>
    val row = line.split(",")
    Edge(row(0).toLong, row(1).toLong, (row(2), row(3)))
}

Обновление:

Я исправил свой код так:

    case class WriterWriterProperties(weight: String, edgeType: String)
 val edgesWriterWriterCollaborated: RDD[Edge[WriterWriterProperties]] = sc.textFile(edgeWeightedWriterWriterCollaborated).map {
  line =>
    val row = line.split(",")
    Edge(row(0).toLong, row(1).toLong, WriterWriterProperties(row(2), row(3)))
}

Однако, когда я пытаюсь напечатать:

   graph4.triplets.foreach(println)

Я получаю сообщение об ошибке: Caused by: java.io.NotSerializableException

1 Ответ

0 голосов
/ 07 июня 2018

Конечно.Используйте Tuple2:

Edge(row(0).toLong, row(1).toLong, (row(2), row(3)))

или любой предметный предмет, который имеет смысл в вашем случае:

case class FooBar(foo: String, bar: String)

Edge(row(0).toLong, row(1).toLong, FooBar(row(2), row(3)))
...