字符串 RDD 连接操作

String RDD join operation

我在 scala 中有字符串 RDD。字符串是 id 的。应该是这样的。

1
2
3
4

我有另一个像这样的 (id, name) RDD。

(1, Name1)
(2, Name2)
(3, Name3)
(4, Name4)
(5, Name5)
(6, Name6)

现在我想获取第一个 RDD 中所有 ID 的名称。我该怎么做?

我意识到如果第一个 RDD 是一个 pairRDD,我可以加入两个 RDD。那么为什么我们只有 pairRDD 的连接操作?

试试这个:

rdd1.map(x => (x, null)).join(rdd2).mapValues(x => x._2)

根据您对 CafeFeeds 回答的评论,如果 ids RDD 足够小,您可以考虑 'broadcast join'。

val ids: RDD[Int] = ???
val names: RDD[(Int, String)] = ???
val bcIds = sc.broadcast(ids.collect.toSet)
val result = names.filter(x => bcIds.value.contains(x._2))

这样做的好处是您不需要对名称 RDD 进行洗牌,因此如果它明显更大,您将大大减少需要完成的工作量。除此之外,简单的连接方法是最好的。