2016-07-26 21 views
0

私は文字列値と配列値の両方を持つavroファイルのマップを減らす問題に直面しています。Avro Mapreduceジョブが失敗するorg.apache.avro.AvroTypeException

org.apache.avro.AvroTypeException:

  `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]レコード値取得以下の例外の配列と一緒にフェッチすることが分かっEvent_DAを両方の文字列型とレコードの配列を結合するとき、それは問題に見える

org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:231)でEvent_DAを期待することは、入力スキーマファイルです。

これらのタイプのavroファイルのサンプルスキーマファイルを貴重なご提案をください。

答えて

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"}, 
        ....... 
       ] 
     } 
    } 
]} 
関連する問題