Setを出力するDoFn<String, Set<SectionBodyRecord>>
を書きました。 私は私のパイプラインを実行すると、私は、問題が可能性がどこ私は理解していない例外DoFnのcom.google.cloud.dataflow.sdk.util.IllegalMutationException
Caused by: com.google.cloud.dataflow.sdk.util.IllegalMutationException: DoFn UnmarshalGcsPath mutated value
[SectionBodyRecord{txId='3UR93528NX413902J'},
SectionBodyRecord{txId='15N97640P5806660M'},
SectionBodyRecord{txId='7TG473112Y9407154'},
SectionBodyRecord{txId='9A1906561E887050P'},
SectionBodyRecord{txId='4FP63718R4365381L'}]
after it was output (new value was
[SectionBodyRecord{txId='9A1906561E887050P'},
SectionBodyRecord{txId='7TG473112Y9407154'},
SectionBodyRecord{txId='3UR93528NX413902J'},
SectionBodyRecord{txId='4FP63718R4365381L'},
SectionBodyRecord{txId='15N97640P5806660M'}]).
Values must not be mutated in any way after being output.
at com.google.cloud.dataflow.sdk.transforms.ParDo$ImmutabilityCheckingOutputManager.verifyOutputUnmodified(ParDo.java:1344)
at com.google.cloud.dataflow.sdk.transforms.ParDo$ImmutabilityCheckingOutputManager.output(ParDo.java:1306)
at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnContext.outputWindowedValue(DoFnRunnerBase.java:288)
at com.google.cloud.dataflow.sdk.util.DoFnRunnerBase$DoFnProcessContext.output(DoFnRunnerBase.java:450)
at my.tests.pipelines.CsvToDatastore$UnmarshalGcsPath.processElement(CsvToDatastore.java:185)
を取得します。また、私は試してみました
ImmutableSet<SectionBodyRecord> irecs = ImmutableSet.copyOf(records);
c.output(irecs);
しかし、問題が残っています。
提案がありますか?事前に
おかげで、 マイケル
UnmarshalGcsPathのコードが表示されていないとわかりにくいです。あなたはそれを投稿できますか? – jkff
どんな種類の 'Set'表現が使われていますか? 'Set'と' SectionBodyRecord'の両方に対してどのように等式が定義されていますか?このエラーに基づいて、セットは等価であると見なされますが、それらのセットは同じであるとみなされます。 'SectionBodyRecord'sは、' txId'値が等しい場合、等しく扱われますか? –