1

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);
  }
}
4

1 回答 1

2

不,通常elem在调用c.output(elem).

这是因为elem在没有复制的情况下传递给消费者(为了提高效率)。消费者可能希望c.element()在处理之前缓冲其输入元素 ()。修改输出elem会影响缓冲的元素。

于 2015-01-27T19:14:07.100 回答