使用DirectRunner测试数据流并获得大量verifyUnmodifiedThrowingCheckedExceptions

时间:2018-04-05 21:27:06

标签: google-cloud-dataflow apache-beam

我正在使用我的Mac上的DirectRunner测试我的Dataflow管道并得到了很多像这样的“警告”消息,我是否知道如何摆脱它们,因为它太多了,我甚至看不到我的调试消息。 / p>

由于

Apr 05, 2018 2:14:48 PM org.apache.beam.sdk.util.MutationDetectors$CodedValueMutationDetector verifyUnmodifiedThrowingCheckedExceptions
WARNING: Coder of type class org.apache.beam.sdk.coders.SerializableCoder has a #structuralValue method which does not return true when the encoding of the elements is equal. 
Element com.apigee.analytics.platform.core.service.schema.EventRow@4a590d0b

2 个答案:

答案 0 :(得分:6)

equals() expects开始,确保所有序列化值都具有正确的SerializableCoder实现可能有所帮助:

  

对象的结构值是对象本身。 SerializableCoder应仅用于具有正确Object#equals实现的对象。

您可以为自己的POJO实施自己的Coder。 SerializableCoder不保证根据docs确定编码:

  

SerializableCoder不保证确定性编码,如Java   序列化可能会产生两个等价的不同二进制编码   对象。

This article explains custom coders in details

答案 1 :(得分:1)

我有同样的问题。我将SerializableCoder用于实现Serializable的类,并且我的测试失败了,因为PAssert()containsInAnyOrder()方法未使用MyClass.equals()来评估对象相等性。我equals()方法的签名是:

public boolean equals(MyClass other) {...}

我要解决的所有事情就是根据Object定义equals:

public boolean equals(Object other) {...}

这使警告消失了,并使测试通过了。