java - Spark : Cogroup RDDs fails in case of huge group

标签 java scala apache-spark indexoutofboundsexception illegalargumentexception

下午好!我有一个问题:

val rdd1: RDD[(key, value)] = ...
val rdd2: RDD[(key, othervalue)] = ...

我要过滤rdd1并丢弃所有不在 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_VALUEjava.lang.ArrayIndexOutOfBoundException

我认为这是因为我的组太大了。

那么我该如何解决这个问题呢?有没有通用的方法来解决这个问题?

最佳答案

您是否考虑过使用subtractByKey

类似的东西

rdd1.map(x => (x, x))
    .subtractByKey(rdd2)
    .map((k,v) => k)

关于java - Spark : Cogroup RDDs fails in case of huge group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30919061/

相关文章:

scala - 如何在 Spark 中创建一个空的数据帧

java - 使用 apache commons csv 按索引大小而不是 withFirstRecordAsHeader 读取 csv

java - andengine中如何应用渐变背景

user-interface - 在 Scala 中改进 MVP

scala - 收集和计数操作之间有什么区别?

apache-spark - 无法使用Spark在Docker上运行Cassandra

java打印字符串给出指针编号

java - 使用 Spring :message to define form tag attribute in Spring web application

forms - 获取 lift 中的复选框和单选按钮值

apache-spark - Spark Yarn 内存配置