有没有办法改变Spark中JavaPairRDD的值?

有没有办法改变Spark中JavaPairRDD的值?

问题描述:

假设我已经有一个JavaPairRDD。主要目的是修改第二个值并且不要更改配对键。我怎么能这样做? 例如,我有具有JavaPairRDD值:有没有办法改变Spark中JavaPairRDD的值?

("first", "1;2") 
("second", "3;4") 

所以我想更换成形式是:

("first", "3") 
("second", "7") 

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

是的,当然。使用mapValues()

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

这接通每个Integer值转换成例如其String表示。密钥保持不变。

+0

从技术上讲,你并没有修改RDD(因为它是不可变的),而是创建了一个新的RDD。但是,这是做到这一点的正确方法。由于动作之前的所有转换一起执行,因此不一定使用任何额外的存储器。 – David 2014-10-22 16:15:12

+1

是的,我认为我不认为pairRDD是突变的。 – 2014-10-22 21:39:25