0

我在减少同时具有字符串和数组值的 avro 文件时遇到了问题。

           `Describe hdfs:/test/test.avro                                       
           number                      STRING
           totalProductFee            STRING
           productID                   STRING
           otherPartyId               STRING
           module                     STRING
           client                     STRING
           Event_DA                ARRAY
           Event_DA.recType           STRING
           Event_DA.AccountID         STRING
           Event_DA.Identifier        STRING
           Event_DA.ValueBefore       STRING
           Event_DA.ValueAfter        STRING
           Event_DA.Change            STRING
           Event_DA.ExpiryDate         STRING

但是,当我尝试运行作业以获取记录值的数组 [Event_DA] 时,会出现以下异常:

org.apache.avro.AvroTypeException:找到 Event_DA,在 org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:231)期待 Event_DA

结合字符串类型和记录数组时,看起来问题出在输入模式文件上。

请为这些类型的 avro 文件提供带有示例架构文件的宝贵建议。

4

1 回答 1

0

根据您的架构定义,Event_DA 将是“记录”类型,而不是“数组”类型。您的 Avro 架构将如下所示:

{
"type":"record",
"name":"myrecordname"
"fields": [
   {"name": "number", "type": "string"},
   {"name": "totalProductFee", "type": "string"},
   .......
   {"name": "Event_DA", "type": {"type":"record, "name":"Event_DA",
       "fields": [{"name":"recType", "type":"string"},
                  {"name":"AccountID", "type":"string"},
                  .......
                 ]
        }
   }
]}
于 2016-08-09T20:33:13.067 回答