我可以在PySpark中安全地使用RDD.aggregate中的可变对象吗?

时间:2016-05-06 14:07:44

标签: apache-spark pyspark rdd

我正在编写PySpark命令RDD.aggregate的函数,它要求输出以下参数:aggregate(zeroValue, seqOp, combOp)

我可以为这些参数的所有使用可变对象,而不会弄乱逻辑吗?

基本上为了效率,我希望调用类似

的内容
  • zeroValue.add(other)
  • def seqOp(x1, x2): return x1.add(x2)
  • def seqOp(x1, x2): return x1.combine(x2)

所有方法都将return self。这样我就不必重新分配对象了。

1 个答案:

答案 0 :(得分:2)

是的,您可以将可变对象用作fold(ByKey)aggregate(ByKey)等方法的聚合缓冲区,因为它在docstring中有明确说明:

  

允许函数op(t1,t2)修改t1并将其作为结果值返回以避免对象分配;但是,它不应该修改t2。

缓冲区(zeroValue)每个任务初始化一次,因此可以安全地进行变异。