首页 > 解决方案 > 在 ParDo 中在哪里初始化可重用对象?

问题描述

我的梁作业中的 ParDo 示例(使用 Dataflow 运行器运行):

class StreamEventToJsonConverter : DoFn<MyClass, String>() {
    @ProcessElement
    fun processElement(@Element element: MyClass, receiver: OutputReceiver<String>) {
        val gson = Gson()
        val jsonValue = gson.toJson(element)
        receiver.output(jsonValue)
    }
}

我的问题是:我应该在 processElement 函数中初始化 Gson 对象吗?

它是每个工人只初始化一次还是每次新元素进入函数时初始化一次(似乎被过度杀伤了)?

鉴于 Gson 对象不可序列化。

谢谢你。

标签: apache-beam

解决方案


原来我可以通过DoFn.Setup函数来做:

用于准备用于处理元素包的实例的方法的注释。

这是初始化临时内存资源(例如网络连接)的好地方。然后可以在 DoFn.Teardown 中处理资源。


推荐阅读