如何从PairRDD获取基于Key的新RDD

时间:2015-04-02 10:24:18

标签: java apache-spark rdd

在我的Spark应用程序中,我使用了一个JavaPairRDD<Integer, List<Tuple3<String, String, String>>>,其中包含大量数据。

我的要求是我需要基于密钥的大型PairRDD中的其他RDD JavaRDD<Tuple3<String, String, String>>

1 个答案:

答案 0 :(得分:3)

我不知道Java API,但是这里是你如何在Scala中进行的(在spark-shell中):

def rddByKey[K: ClassTag, V: ClassTag](rdd: RDD[(K, Seq[V])]) = {
  rdd.keys.distinct.collect.map {
    key => key -> rdd.filter(_._1 == key).values.flatMap(identity)
  }
}

每个密钥都必须filter,并ListflatMap展平。

我必须提到这不是一个有用的操作。如果您能够构建原始RDD,则意味着每个List足够小以适应内存。所以我不明白你为什么要把它们变成RDD。