我可以在 PySpark 中安全地使用 RDD.aggregate 中的可变对象吗?
Can I safely use mutable objects in RDD.aggregate in PySpark?
我正在为 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
。这样我就不用重新分配对象了。
是的,您可以使用可变对象作为 fold(ByKey)
或 aggregate(ByKey)
等方法的聚合缓冲区,因为它在文档字符串中有明确说明:
The functions op(t1, t2) is allowed to modify t1 and return it as its result value to avoid object allocation; however, it should not modify t2.
缓冲区(zeroValue
)每个任务初始化一次,因此可以安全地进行变异。
我正在为 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
。这样我就不用重新分配对象了。
是的,您可以使用可变对象作为 fold(ByKey)
或 aggregate(ByKey)
等方法的聚合缓冲区,因为它在文档字符串中有明确说明:
The functions op(t1, t2) is allowed to modify t1 and return it as its result value to avoid object allocation; however, it should not modify t2.
缓冲区(zeroValue
)每个任务初始化一次,因此可以安全地进行变异。