我想知道在这种情况下 Spark 中是否允许重用对象:
myRDD.aggregateByKey(DisplaysClicksSum.newZero(), (sum, displayClick) -> {
sum.displaysSum += 1;
sum.clicksSum += displayClick.clicked() ? 1 : 0;
return sum;
}, (sum1, sum2) -> {
sum1.displaysSum += sum2.displaysSum;
sum1.clicksSum += sum2.clicksSum;
return sum1;
});
或者我应该创建新对象以从这些函数返回它们?
最佳答案
是的,这是允许的,从某种意义上说,Spark 中没有任何问题或禁止它。只需确保初始值对象没有被其他对象重用或更改即可。
在使用 Hadoop 中的Writable
对象的 RDD 时,有时这可能会出现问题。有时为了性能,Hadoop 会重用其 InputFormat
中的对象,这意味着它可能会更改您下面这些可变对象的值,从而引起各种意外。但这里的情况并非如此。
关于apache-spark - 我可以重用参数实例来从 Spark 中的聚合函数返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26548330/