【发布时间】:2019-11-07 03:54:44
【问题描述】:
我是 Scala 编程的新手,目前正在使用 RDD。我正在尝试将 RDD 传递给一个函数,并希望该函数返回,以便我可以将它存储到一个新的 RDD。出于我使用地图的目的。但是 map 调用了该函数两次,而 RDD 中只有一个条目。当我使用 collect.foreach() 而不是 map 时,它工作正常,但我无法将更新值保存在新的 RDD 中,因为它在 Unit 中返回值。
此代码从更新函数返回值,但调用该函数两次:
temp_rdd = my_rdd.map{x => update(x)}
而这个完美地调用它一次,但我无法修改 RDD 值:
my_rdd.collect().foreach{x => update(x)}
foreach 函数返回“单位”格式,因为我无法将其保存在新的 RDD 中。我正在寻找一种将更新后的值存储在新 RDD 中的方法。
【问题讨论】:
-
函数将被调用的次数与调用“temp_rdd”操作的次数一样多。每次“temp_rdd”具体化时,都会调用函数。例如,如果调用动作“temp_rdd.collect()” 3 次,则所有转换(在本例中为“map”)将被调用 3 次。为避免这种情况,可以使用缓存。
标签: scala apache-spark rdd