数据流PTransform ParDo非法突变值异常

时间:2018-07-08 19:11:30

标签: java google-cloud-dataflow key-value apache-beam

我正在尝试编写一个数据流测试,该测试将创建一个PCollection,然后对其应用一个ParDo,然后在使用PAssert进行测试时运行管道,但是我一直收到此错误-

  

org.apache.beam.sdk.util.IllegalMutationException:PTransform ParDo(MyTransform)/ ParMultiDo(MyTransform)

     

非法变异值KV {123456,[MyObject(myField = S,myField2 = 364,myField3 = 123456),MyObject(myField = S,myField2 = 202,myField3 = 123456)]}

     类org.apache.beam.sdk.values.KV的

。输入值不得以任何方式突变。

我正在创建这样的KV对-

MyObject myObject = new MyObject();
myObject.setMyField("S");
myObject.setMyField2(364);
myObject.setMyField3(123456);

MyObject myObject2 = new MyObject();
myObject2.setMyField("S");
myObject2.setMyField2(202);
myObject2.setMyField3(123456);

ArrayList<MyObject> myObjects = new ArrayList<>();
myObjects.add(myObject);
myObjects.add(myObject2);

ArrayList<KV<String, Iterable<MyObject>>> kvInput = new ArrayList<>();
kvInput.add(KV.of("123456", myObjects));

然后尝试创建我要测试的PCollection-

PCollection<KV<String, Iterable<MyObject>>> input = 
pipeline.apply("Creating main input", Create.of(kvInput))
.setCoder(KvCoder.of(StringUtf8Coder.of(), 
IterableCoder.of(SerializableCoder.of(MyObject.class))));

无论如何告诉我,不得以任何方式更改KV的输入值?

即使我的MyObject类的标头是-

public class MyObject implements Serializable {

我使用编码器错了吗?谁能指出我以正确的方式从这对KV对中创建PCollection?

谢谢

0 个答案:

没有答案