gpt4 book ai didi

google-cloud-dataflow - 如何在 Google Cloud Dataflow 中编写可为 null 的对象?

转载 作者:行者123 更新时间:2023-12-01 11:30:41 24 4
gpt4 key购买 nike

这篇文章旨在回答如下问题:

  • 哪些内置 Coder 支持可空值?
  • 如何编码可为 null 的对象?
  • 具有可为空字段的类呢?
  • 包含 null 条目的集合呢?

最佳答案

您可以检查 DataflowJavaSDK source 中的内置编码器.

一些默认编码器不支持null值,通常是为了效率。例如,DoubleCoder总是编码 double使用 8 个字节;添加一点以反射(reflect)是否 doublenull将向所有非 null 添加(填充的)第 9 个字节值(value)观。

可以使用下面概述的技术对可为 null 的值进行编码。

  1. 我们通常建议使用 AvroCoder 编码类。 AvroCoder支持用 org.apache.avro.reflect.Nullable 注释的可空字段注释:

    @DefaultCoder(AvroCoder.class)
    class MyClass {
    @Nullable String nullableField;
    }

    参见 TrafficMaxLaneFlow获取更完整的代码示例。

    AvroCoder还支持包含 Null 的字段在Union .

  2. 我们建议使用 NullableCoder 对可空对象本身进行编码。这实现了#1 中的策略。

    例如,考虑以下工作代码:

    PCollection<String> output =
    p.apply(Create.of(null, "test1", null, "test2", null)
    .withCoder(NullableCoder.of(String.class)));
  3. 嵌套 null许多编码器都支持字段/对象,只要嵌套编码器支持 null字段/对象。

    例如,SDK 应该能够使用默认的 CoderRegistry 推断出工作的编码器对于 List<MyClass> -- 它应该自动使用 ListCoder嵌套 AvroCoder .

    类似地,一个List<String>可能- null条目可以用编码器编码:

    Coder<List<String>> coder = ListCoder.of(NullableCoder.of(String.class))

最后,在某些情况下,编码器必须是确定性的,例如,用于 GroupByKey 的 key .在 AvroCoder , @Nullable只要 Coder 字段就被确定性地编码因为基类型本身是确定性的。同样,使用 NullableCoder不应影响对象是否可以确定性编码。

关于google-cloud-dataflow - 如何在 Google Cloud Dataflow 中编写可为 null 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32342402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com