我是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,即唯一路径。从那时起,我只能获得飞往源头的独特航线。