После прочтения вашего источника HDFS и ваши данные в rdd
, вы можете попробовать что-то вроде следующего:
import org.apache.spark.rdd.RDD
import org.apache.spark.graphx.Edge
// Sample data
val rdd = sc.parallelize(Seq("1: 1, 2, 3", "2: 2, 3"))
val edges: RDD[Edge[Int]] = rdd.flatMap {
row =>
// split around ":"
val splitted = row.split(":").map(_.trim)
// the value to the left of ":" is the source vertex:
val srcVertex = splitted(0).toLong
// for the values to the right of ":", we split around "," to get the other vertices
val otherVertices = splitted(1).split(",").map(_.trim)
// for each vertex to the right of ":", we create an Edge object connecting them to the srcVertex:
otherVertices.map(v => Edge(srcVertex, v.toLong, 1))
}
Редактировать
Кроме того, если ваши вершины имеют постоянный вес по умолчанию, вы можете создать свой график прямо с краев, поэтому вам не нужно создавать вершиныRDD:
import org.apache.spark.graphx.Graph
val g = Graph.fromEdges(edges, defaultValue = 1)
th anks за вашу помощь !! я последовал тому, что вы сказали, и смог создать граф val, просто пытаясь найти способ увидеть, сработало ли это! –
Я пробовал делать это так, как вы сказали, единственное, что не работает, было RDD [Edge [Int], поэтому я просто использовал RDD. но продолжайте получать следующие ошибки:: 43: error: not found: значение Edge otherVertices.map (v => Edge (srcVertex, v.toLong, 1)) ^ : 43: ошибка: тип несоответствия; найдено: Array [Nothing] required: TraversableOnce [?] otherVertices.map (v => Edge (srcVertex, v.toLong, 1)) –
Вы импортировали класс Edge? 'import org.apache.spark.graphx.Edge'. Вероятно, это проблема, а также почему «RDD [Edge [Int]]' не работает –