spark join-(边和顶点)

z8dt9xmd  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(324)

我有 vertexRDD 它有两列

(vertexId, uniqueVertexId)
(V1, 1L)
(V2, 2L)
(V3, 3L)
(V4, 4L)

我也有 edgeRDD ```
(srcId, destId)
(V1, V2)
(V2, V3)
(V1, V4)

我怎样才能加入他们的Spark,使边缘rdd将如下所示

(srcId, destId, uniqueSrcId, uniqueDestId)
(V1, V2, 1L, 2L)
(V2, V3, 2L, 3L)
(V1, V4, 1L, 4L)

我尝试了不同的连接,但没有达到预期的输出。谢谢你的帮助。
wlp8pajw

wlp8pajw1#

我将使用java,但我想把它转换成scala很简单。
假设 edgeRDD 有类型 JavaPairRDD<String,String>vertexRDD 有类型 JavaPairRDD<String,Long> : edgeRDD.join(vertexRDD) 将屈服 JavaPairRDD<String,Tuple2<String,Long>> 包含以下内容(我们称之为 join1 ):

(V1, Tuple2(V2,1L)) 
(V2, Tuple2(V3,2L))
(V1, Tuple2(V4,1L))

然后你就皈依了 join1 变成另一个 JavaPairRDD<String,Tuple2<String,Long>> 通过使用map(我们称之为map)重新构造键和值 join2 ):

(V2, Tuple2(V1,1L)) 
(V3, Tuple2(V2,2L))
(V4, Tuple2(V1,1L))

最后表演 vertexRDD.join(join2) 得到 JavaPairRDD<String,Tuple2<Long,Tuple2<String,Long>>> 内容:

(V2, Tuple2(2L, Tuple2(V1,1L)))
(V3, Tuple2(3L, Tuple2(V2,2L)))
(V4, Tuple2(4L, Tuple2(V1,1L)))

你可以通过Map JavaRDD<String> (或一个新的 JavaPairRDD )通过在Map中适当地组合键和值。我会让你决定。

相关问题