[英]Spark: Cogroup RDDs fails in case of huge group
下午好! 我有个问题:
val rdd1: RDD[(key, value)] = ...
val rdd2: RDD[(key, othervalue)] = ...
我想过滤rdd1
并丢弃所有不在rdd2
中的rdd2
。 我知道两种方法可以做到这一点。
第一:
val keySet = rdd2.map(_.key).distinct().collect().toSet
rdd1.filter(x => keySet.contains(x))
它不起作用,因为keySet
很大并且不适合内存。
另一个:
rdd1.cogroup(rdd2)
.filter(x => x._2._2.nonEmpty)
.flatMap(x => x._2._1)
这里发生了一些事情,我得到两种错误(在不同的代码位置): java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
和java.lang.ArrayIndexOutOfBoundException
我认为那是因为我的团队太大了。
那么我该如何解决呢? 是否有解决此问题的常用方法?
考虑rdd1.subtractByKey(rdd1.subtractByKey(rdd2))。 rdd1.subtractByKey(rdd2)将获得具有在rdd1中但不在rdd2中的键的元素。 这与您想要的相反。 这些将完全得到您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.