SerializableCoder和AvroCoder有什么区别?

时间:2018-06-25 17:48:16

标签: google-cloud-dataflow apache-beam serializable

SerializableCoder和AvroCoder有什么区别?在定制的数据模型上,何时应在另一个之上使用?从文档页面看来,AvroCoder在模型架构上更为严格,而SerializableCoder只需要模型来实现本质上为空的Serializable接口。 SerializableCoder的文档确实警告不要保证确定性编码。除此之外,在哪种情况下,人们会选择AvroCoder而不是SerializableCoder?

1 个答案:

答案 0 :(得分:0)

主要区别在于AvroCoder使用Avro Schemas,即,您仅将AvroCoder用于.avro文件。

使用JSON格式创建Avro模式,如下所示:

{
"type" : "record",
"name" : "userInfo",
"namespace" : "my.example",
"fields" : [{"name" : "username", 
            "type" : "string", 
            "default" : "NONE"},

            {"name" : "age", 
            "type" : "int", 
            "default" : -1},

            {"name" : "phone", 
            "type" : "string", 
            "default" : "NONE"},

            {"name" : "housenum", 
            "type" : "string", 
            "default" : "NONE"},

            {"name" : "street", 
            "type" : "string", 
            "default" : "NONE"},

            {"name" : "city", 
            "type" : "string", 
            "default" : "NONE"},

            {"name" : "state_province", 
            "type" : "string", 
            "default" : "NONE"},

            {"name" : "country", 
            "type" : "string", 
            "default" : "NONE"},

            {"name" : "zip", 
            "type" : "string", 
            "default" : "NONE"}]
}

另一方面,SerializableCoder实现Java Serializable interface。这允许具有用于对象序列化的类,但是没有特定的方法。

此外,非Java应用程序也可以读取avro模式。