Scala - 使用另一个Map更新RDD

时间:2016-04-12 11:15:36

标签: scala apache-spark rdd

我试图用来自另一个地图的更多信息更新RDD ....我写了这个但是没有用。

其中:

LocalCurrencies是货币序列类

rdd:RDD [String,String]

...
val localCurrencies = Await.result(CurrencyDAO.currencies, 30 seconds)

//update ISO3
rdd.map(r => r.updated("currencyiso3", localCurrencies.find(c => c.CurrencyId ==   
rdd.get("currencyid")).get.ISO3))

//Update exponent
rdd.map(r => r.updated("exponent", localCurrencies.find(c => c.CurrencyId == 
rdd.get("currencyid")).get.Exponent))

有什么建议吗?

由于

1 个答案:

答案 0 :(得分:2)

map 修改 RDD,它会创建一个新的(同样适用于每个Spark转换)。如果你实际上没有对这个新的RDD做任何事情,Spark甚至都不会打扰它。所以你要写

val rdd1 = rdd.map(...).map(...) // better to combine two `map`s into one

并从那时开始使用rdd1(如果需要,您仍然可以使用rdd)。这不一定是唯一的错误,但您仍需要修复它。