java - 如何根据Key从PairRDD中获取新的RDD

标签 java apache-spark rdd

在我的 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/

相关文章:

java - 在java中,如何在另一个字符串数组中搜索字符串数组?

java - 如何在 IntelliJ 中控制 Spark 日志记录

java - 立即转换 Spark 数据帧现有架构

scala - SparkSQL时间戳查询失败

python - Spark MLlib 中的 StringIndexer

apache-spark - Spark多维RDD分区

java - 禁用 JList 中的项目

java - 如何在 JMapViewer 中的两点之间放置像箭头一样的图像

java - 在Java 1.8中的spark groupBy中按部门查找平均值

java - 如何替换数组的值?