DoFn.Context.output()是否复制了该对象?
调用输出后重用对象是否安全?例如,以下代码将输出具有相同时间戳的10条记录或具有不同时间戳的10条记录吗?
public void processElement(DoFn<LogMessage, Event>.ProcessContext c) throws Exception {
Event e = new Event();
for (int i = 0; i < 10; i++) {
e.setTimestampMs(i);
c.output(e);
}
}
答案 0 :(得分:2)
不,通常在致电elem
后修改c.output(elem)
是不安全的。
这是因为elem
传递给消费者而没有复制(为了提高效率)。消费者可能希望在处理之前缓冲其输入元素(c.element()
)。修改输出elem
会影响缓冲的元素。