有没有办法改变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
表示。密钥保持不变。
从技术上讲,你并没有修改RDD(因为它是不可变的),而是创建了一个新的RDD。但是,这是做到这一点的正确方法。由于动作之前的所有转换一起执行,因此不一定使用任何额外的存储器。 – David 2014-10-22 16:15:12
是的,我认为我不认为pairRDD是突变的。 – 2014-10-22 21:39:25