DoFn.Context.output()是否复制了该对象?

时间:2015-01-23 22:57:59

标签: google-cloud-dataflow

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

1 个答案:

答案 0 :(得分:2)

不,通常在致电elem后修改c.output(elem)是不安全的。

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