有没有办法只更改Spark中的JavaPairRDD值?

use*_*089 2 java mapreduce apache-spark

说我已经有了一个JavaPairRDD.主要目的是修改第二个值而不更改配对键.我怎么能这样做?例如,我有一个有价值的JavaPairRDD:

("first", "1;2")
("second", "3;4")
Run Code Online (Sandbox Code Playgroud)

所以我想把它改成形式:

("first", "3")
("second", "7")
Run Code Online (Sandbox Code Playgroud)

我知道我们可以先映射然后减少,但这只是一个简单的例子,如果我们映射然后减少,我的情况会复杂得多.有没有什么方法可以像迭代数组一样直接修改JavaPairRDD的值?

Sea*_*wen 6

是的,当然了.用途mapValues():

JavaPairRDD<Long,Integer> pairRDD = ...
JavaPairRDD<Long,String> mapped = pairRDD.mapValues(
  new Function() {
    @Override
    public String call(Integer i) {
      return i.toString();
    }
  );
Run Code Online (Sandbox Code Playgroud)

例如,这会将每个Integer值转换为其String表示形式.键保持不变.