【发布时间】:2018-10-07 16:13:37
【问题描述】:
如何获取键值对中值的交集?
我有一对:
(p, Set(n))
其中我使用了reduceByKey,终于得到了:
(p1, Set(n1, n2)) (p2, Set(n1, n2, n3)) (p3, Set(n2, n3))
我想要的是找到所有对中存在的 n 并将它们作为值。对于上述数据,结果将由
(p1, Set(n2)) (p2, Set(n2)), (p3, Set(n2))
只要我搜索了一下,spark 中就没有reduceByValue。唯一似乎更接近我想要的功能是reduce(),但它不起作用,因为结果只有一个键值对((p3, Set(n2)))。
有什么办法可以解决吗?还是我应该从一开始就考虑别的?
代码:
val rRdd = inputFile.map(x => (x._1, Set(x._2)).reduceByKey(_++_)
val wrongRdd = rRdd.reduce{(x, y) => (x._1, x._2.intersect(y._2))}
我知道为什么wrongRdd 不正确,我只是把它显示为(p3, Set(n2)) 是如何产生的。
【问题讨论】:
-
减少后,您将拥有想要放入每一对的值,如果有的话。现在你需要再用
map来替换
标签: scala apache-spark key-value