修改Inmutable Spark RDD的最佳过程

时间:2016-11-03 11:48:15

标签: apache-spark rdd

过去,我使用低级并行化(openmpi,openmp,...)

我目前正在使用Spark项目,我不知道使用RDD的最佳程序,因为它们是不可变的。

我将用一个简单的例子来解释我的问题,想象一下在我的RDD中我有一个对象,我需要更新一个属性。

解决此问题的最实用和最有效的方法是实现一个名为setAttribute(new_value)的方法。

Spark RDD是不可变的,所以我需要创建一个函数(例如myModifiedCopy(new_value)),它返回该对象的副本,但在其属性中使用new_value并更新RDD,如下所示:

myRDD = myRDD.map(x->x.myModifiedCopy(new_value)).cache()

我的对象非常复杂,它们使用大量的RAM内存(它们非常庞大)。此过程很慢,您必须创建RDD的每个元素的完整副本,只是为了修改一个小值。

有没有更好的程序来处理这类问题?

您推荐不同的技术吗?

我会为一个可变的RDD而杀人。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

我相信你对Apache Spark有一些误解。当你进行转换时,实际上你并没有在内存中创建RDD的完整副本,你只是设计"运行操作时在每条记录中执行的一系列微小转换。 例如,mapfilterflatMap完全是转换,因此是懒惰的,因此当您执行它们时,您只需设计计划但不执行它。另一方面,collectcount表现不同,他们触发所有先前的转换(执行在中间阶段中定义的所有内容),直到他们得到结果。