2016-07-26 22 views
0

Ich habe Probleme mit der Map-Reduzierung der avro-Datei, die sowohl String- als auch Array-Werte hat.Avro Mapreduce Job fehlgeschlagen 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 

aber wenn ich versuche, den Job zu holen zusammen mit dem Array [Event_DA] von Rekordwerten immer die folgenden Ausnahmen zu laufen:

org.apache.avro.AvroTypeException: Gefunden Event_DA ist

Es sieht die Ausgabe Event_DA bei org.apache.avro.io.ResolvingDecoder.doAction (ResolvingDecoder.java:231) erwartet mit der Eingabeschemadatei, wenn sowohl die String-Typ und Array von Datensatz kombiniert.

Bitte geben Sie einen wertvollen Vorschlag mit Beispiel-Schema-Datei für diese Art von AVRO-Dateien.

Antwort

0

Gemäß Ihrer Schemadefinition wäre Event_DA ein "Datensatz" -Typ, aber kein "Array" -Typ. Ihr Avro-Schema würde folgendermaßen aussehen:

{ 
"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"}, 
        ....... 
       ] 
     } 
    } 
]}