【发布时间】:2020-03-28 12:23:17
【问题描述】:
给定两个大型 RDD,a 和一组 (key, value) 对和 b 只有 keys,加入它们的最佳方法是什么,以便 a 只保留那些匹配的行b的键?
更具体地说,这就是我想要做的:
val a: RDD[(Int, Double)] = ...
val b: RDD[Int] = ...
val c: RDD[(Int, Double)] = a.myFilterJoin(b)
其中c 仅包含a 中与b 中的键匹配的行,我们可以假设a 仅包含唯一键。有类似myFilterJoin 的东西吗?
请注意,如果b 足够小,我可以简单地将其作为一组广播,然后将其用作b 上的过滤器。但是让我们假设b 足够大,以至于这个广播非常昂贵。
我通常做的是将一个虚拟变量添加到b,以便b 获得(key, dummy) 的形式以便能够进行连接,然后我在映射中删除虚拟变量。但这似乎很hacky,我想知道是否有更好的解决方案。
【问题讨论】:
标签: scala apache-spark rdd