在我的Spark应用程序中,我使用了一个JavaPairRDD<Integer, List<Tuple3<String, String, String>>>
,其中包含大量数据。
我的要求是我需要基于密钥的大型PairRDD中的其他RDD JavaRDD<Tuple3<String, String, String>>
。
答案 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
,并List
与flatMap
展平。
我必须提到这不是一个有用的操作。如果您能够构建原始RDD,则意味着每个List
足够小以适应内存。所以我不明白你为什么要把它们变成RDD。