Dan*_*rin 3 google-cloud-dataflow
本文旨在回答以下问题:
Coders支持可空值?null条目的馆藏怎么样?您可以检查DataflowJavaSDK源中的内置编码器.
某些默认编码器不支持null值,通常是为了提高效率.例如,DoubleCoder始终double使用8个字节进行编码; 平添几分反映是否double就是null将一个(填充)第9字节添加到所有非null数值.
可以使用下面概述的技术对可空值进行编码.
我们通常建议使用AvroCoder编码类.AvroCoder支持使用org.apache.avro.reflect.Nullable注释注释的可空字段:
@DefaultCoder(AvroCoder.class)
class MyClass {
@Nullable String nullableField;
}
Run Code Online (Sandbox Code Playgroud)
有关更完整的代码示例,请参阅TrafficMaxLaneFlow.
AvroCoder还支持包含Null在a中的字段Union.
我们建议使用NullableCoder自身编码可为空的对象.这实现了#1中的策略.
例如,请考虑以下工作代码:
PCollection<String> output =
p.apply(Create.of(null, "test1", null, "test2", null)
.withCoder(NullableCoder.of(String.class)));
Run Code Online (Sandbox Code Playgroud)嵌套null场/目的通过许多编码器,只要该嵌套编码器支持的支持,null场/对象.
例如,SDK应该能够推断工作编码器使用默认CoderRegistry的List<MyClass>-它应该自动使用ListCoder了嵌套AvroCoder.
类似地,List<String>带有可能null条目的a可以用编码器编码:
Coder<List<String>> coder = ListCoder.of(NullableCoder.of(String.class))
Run Code Online (Sandbox Code Playgroud)最后,在某些情况下,编码器必须是确定性的,例如,用于的密钥GroupByKey.在AvroCoder,@Nullable只要Coder基本类型本身是确定性的,就确定性地编码字段.类似地,使用NullableCoder不应影响是否可以确定性地编码对象.
| 归档时间: |
|
| 查看次数: |
927 次 |
| 最近记录: |