在我的 Spark 应用程序中,我使用的是 JavaPairRDD<Integer, List<Tuple3<String, String, String>>>
其中数据量很大。
我的要求是我需要一些其他 RDD JavaRDD<Tuple3<String, String, String>>
来自基于键的大型 PairRDD。
最佳答案
我不知道 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)
}
}
您必须对每个键进行过滤
,并使用flatMap
展平List
。
我必须指出,这不是一个有用的操作。如果您能够构建原始 RDD,则意味着每个 List
足够小以适合内存。所以我不明白为什么你想把它们变成 RDD。
关于java - 如何根据Key从PairRDD中获取新的RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29410573/