【发布时间】:2020-03-02 17:07:26
【问题描述】:
我在 GraphX 中处理图表。通过使用下面的代码,我创建了一个变量来存储 RDD 中节点的邻居:
val all_neighbors: VertexRDD[Array[VertexId]] = graph.collectNeighborIds(EdgeDirection.Either)
我使用广播变量通过以下代码向所有从站广播邻居:
val broadcastVar = all_neighbors.collect().toMap
val nvalues = sc.broadcast(broadcastVar)
我想计算两个节点邻居之间的交集。例如节点 1 和节点 2 邻居之间的交集。
起初我使用这段代码来计算使用广播变量 nvalues 的交集:
val common_neighbors=nvalues.value(1).intersect(nvalues.value(2))
一旦我使用下面的代码来计算两个节点的交集:
val common_neighbors2=(all_neighbors.filter(x=>x._1==1)).intersection(all_neighbors.filter(x=>x._1==2))
我的问题是:上述哪种方法更高效、更分布式和并行?使用广播变量nvalue计算交集还是使用过滤RDD方法?
【问题讨论】:
标签: scala apache-spark spark-graphx