我正在使用我的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
答案 0 :(得分:6)
从equals()
expects开始,确保所有序列化值都具有正确的SerializableCoder
实现可能有所帮助:
对象的结构值是对象本身。
SerializableCoder
应仅用于具有正确Object#equals
实现的对象。
您可以为自己的POJO实施自己的Coder
。 SerializableCoder不保证根据docs确定编码:
SerializableCoder
不保证确定性编码,如Java 序列化可能会产生两个等价的不同二进制编码 对象。
答案 1 :(得分:1)
我有同样的问题。我将SerializableCoder用于实现Serializable的类,并且我的测试失败了,因为PAssert()containsInAnyOrder()方法未使用MyClass.equals()来评估对象相等性。我equals()方法的签名是:
public boolean equals(MyClass other) {...}
我要解决的所有事情就是根据Object定义equals:
public boolean equals(Object other) {...}
这使警告消失了,并使测试通过了。