【问题标题】:How to map keys of JavaPairRDD in spark?如何在 Spark 中映射 JavaPairRDD 的键?
【发布时间】:2016-05-05 23:36:21
【问题描述】:

我是 Spark 的新手,我使用 sc.wholeTextFiles(path); 读取所有文件,函数返回 JavaPairRDD<String, String> 并且 RDD 的键是每个文件的完整路径但是我想要的是将键更改为文件。 他们是不是类似于mapValues(func),但用于键。

【问题讨论】:

  • 你不能对 sc.wholeTextFiles(path) 应用映射操作并将完整路径转换为文件名吗??
  • @shekhar 映射函数将返回 JavaRDD
  • 不行,你只能用.map操作修改key。
  • @shekhar 对不起,但是文档说通过对这个 RDD 的所有元素应用一个函数来返回一个新的 RDD,这意味着在这种情况下我会丢失密钥。
  • 我使用scala,scala中的map函数对rdd和pairedRDD都适用,在java中我认为有mapToPair函数

标签: java apache-spark


【解决方案1】:

这里的关键假设是JavaPairRDD<String, String>JavaRDD<Tuple2<String, String>> 相同。

换句话说,JavaPairRDD 只是元组的RDD。所以你可以使用普通的map 来修改元组键,而保持值不变。

JavaPairRDD<String, String> input = sc.wholeTextFiles(path);
input.map(new Function<Tuple2<String,String>, Tuple2<String,String>>() {
  @Override
  public Tuple2<String, String> call(Tuple2<String, String> tuple) {
    return new Tuple2<>(convertToFilename(tuple._1()), tuple._2());
  }
});

【讨论】:

    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    相关资源
    最近更新 更多