根据数据流2.X的发行说明,删除了IntraBundleParallelization。有没有办法在数据流2.1.0上控制/增加DoFns的并行性?
当我在1.9.0版本的数据流上使用IntrabundleParallelization时,我的性能越来越好。
答案 0 :(得分:1)
它已被删除,因为它的实现会在调用完成后对trait Synchronizable[A,B] {
type S <: Synchronizable[_, _]
val slaves = MutableList.empty[S] // Create list in trait.
def synchronizeWith(q: S) = {
if (!slaves.contains(q)) slaves += q
}
}
class SomeClass[A, B]
extends Synchronizable[A, B] {
override type S = SomeClass[_, _]
}
调用的ProcessContext
进行处理,这是不安全的,并且无法保证可以正常工作。
但是,我同意这是一个有用的抽象,不幸的是我们还没有替代品。
作为解决方法,您可以尝试以下操作:
ProcessElement
中,创建一个包含所需线程数的@Setup
Executor
中,创建一个包裹执行者的@StartBundle
ExecutorCompletionService
中,向其提交@ProcessElement
,表示处理元素的结果Future
,@ProcessElement
poll()
完成未来并输出结果CompletionService
中,等待所有剩余的期货完成,输出结果并关闭@FinishBundle
。请记住不使用期货中的CompletionService
。 ProcessContext
只能在当前线程和当前ProcessContext
调用中使用。