2016-12-16 1 views
0

Я изо всех сил пытаюсь понять, как я собираюсь создать в GraphX ​​в Apache-искре. Я дал следующее:Как создать график в GraphX ​​с этим

файл HDFS, который имеет нагрузки данных, которая приходит в виде:

node: ConnectingNode1, ConnectingNode2..

Например:

123214: 521345, 235213, 657323

мне нужно как-то хранить эти данные в EdgeRDD, чтобы я мог создать свой график в GraphX, но я понятия не имею, как я собираюсь это сделать.

ответ

1

После прочтения вашего источника 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) 
+0

th anks за вашу помощь !! я последовал тому, что вы сказали, и смог создать граф val, просто пытаясь найти способ увидеть, сработало ли это! –

+0

Я пробовал делать это так, как вы сказали, единственное, что не работает, было 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)) –

+0

Вы импортировали класс Edge? 'import org.apache.spark.graphx.Edge'. Вероятно, это проблема, а также почему «RDD [Edge [Int]]' не работает –

 Смежные вопросы

  • Нет связанных вопросов^_^