如何计算GraphX中的加权indegree

时间:2016-02-02 06:02:17

标签: scala apache-spark spark-graphx

我是GraphX的新手,并且正在探索在线找到的示例飞行数据分析。http://www.sparktutorials.net/analyzing-flight-data:-a-gentle-introduction-to-graphx-in-spark

我尝试计算inDegrees(了解到机场的航班数量),但我看到的值与进入机场的独特路线相对应。这意味着如果在特定来源和目的地之间存在多个航班,则允许'说5,我看到这条路线只有1。我想要的是在加权度线中类似的东西,其中在计算indegrees时,应考虑与边缘相关的权重。此权重值位于edge._attr参数中,该参数未考虑计算度。 这是我的代码块

 val df_1 = sqlContext.read.format("com.databricks.spark.csv")
                            .option("header", "true")
                            .load("file:///home/user/testData.csv")

 val flightsFromTo = df_1.select($"Source",$"Target")

  // calculate the number of airport codes present in the data
 val airportCodes = df_1.select($"Source", $"Target")
                          .flatMap(x => Iterable(x(0).toString, x(1).toString))

 val airportVertices: RDD[(VertexId, String)] = airportCodes.distinct()
                  .map(x =>  (MurmurHash.stringHash(x), x))

 val uniqueJourneyLegs = flightsFromTo.map(x => ((MurmurHash.stringHash(x(0).toString),MurmurHash.stringHash(x(1).toString)), 1))
                                  .reduceByKey(_+_).map(x => Edge(x._1._1, x._1._2,x._2))

val graph = Graph(airportVertices, uniqueJourneyLegs, defaultAirport)
val inDegrees = graph.inDegrees.join(airportVertices).sortBy(_._2._1, ascending=false).take(10)
val outDegrees = graph.outDegrees.join(airportVertices).sortBy(_._2._1, ascending=false).take(10)

  // Top 10 Indegrees
println("Top 10 indegrees - > " )
inDegrees.foreach{println}

 // Top 10 out degrees
println("Top 10 outDegrees -> " ) 
outDegrees.foreach{println}        
// Top 10 out degrees
println("Top 10 outDegrees -> " ) 
outDegrees.foreach{println}         

有人可以指向我正确的链接或提供一个提示来解决这个问题吗?每个Edge都有一个名为_attr的属性参数,该参数包含特定源和目标之间的航班数。例如,班加罗尔和钦奈之间每天有5个航班。但是,graph.inDegrees,将其视为1 indegree,即唯一路径。从那时起,我只能获得飞往源头的独特航线。

0 个答案:

没有答案