我想在工人中做异步工作,但是累加器不申请驱动程序,因为已经调用了updateAccumulators方法。
问题是updateAccumulators是私有的,所以我的问题是:是否有一种方法可以强制使用它,或者有另一种方法可以完成我需要的事情>
val partiotionsDone =rdd.sparkContext.longAccumulator("partiotionsDone")
rdd.foreachPartitionAsync { rows =>
Future {
val ingestion = ingestRows(rows)
ingestion onSuccess{
case _=> {
partiotionsDone.add(1)
}
}
}
runTaskEvery(5 seconds,
func= ()=> println("partitionsFinished:${partiotionsDone.value}"),
whenDone=doFinalWork)
runTaskEvery仅打印0个值-尽管调试器显示partiotionsDone.add(1)已成功完成。当然,如果我在等待未来,那一切都会奏效-但这里的重点并不是要这么做