Pig SchemaParseException: невозможно переопределить:

Я использую данные, хранящиеся в формате avro-1.7.4, и пытаюсь использовать Pig для обработки данных. При попытке ЗАГРУЗИТЬ данные, а затем снова их СОХРАНИТЬ, я получаю следующую ошибку:

ОШИБКА 2116: Ошибка проверки выходного местоположения для: 'file:///home/pig/100/test.avro Дополнительная информация: Невозможно переопределить: Сотрудники

Любые идеи/предложения будут оценены.

Спасибо.



ОБНОВИТЬ:

Поле Employees находится в двух местах схемы:

Частичная схема:



    {
                       "name" : "Employees",
                        "type" : [ "null", {
                          "type" : "array",
                          "items" : {
                            "type" : "record",
                            "name" : "CheckResponsibleEmployee",
                            "fields" : [ {
                              "name" : "Id",
                              "type" : "string"
                            }, {
                              "name" : "Name",
                              "type" : "string"
                            }, {
                              "name" : "Job",
                              "type" : "Job"
                            }, {
                              "name" : "Time",
                              "type" : [ "null", "Date" ],
                              "default" : null
                            } ]
                          }
                        } ],
                        "default" : null
                      }

в другом месте (но я думаю, что это нормально):



            {
              "name" : "Employees",
              "type" : "ResponsibleEmployees"
            }


Я просто запускаю скрипт (с загруженными библиотеками piggybank, avro 1.7.4, mapred и т. д.):



    data = LOAD 'part-m-00000.avro' USING AvroStorage();
    STORE data INTO 'output.avro' USING AvroStorage();



Полная трассировка стека



    Pig Stack Trace
    ---------------
    ERROR 2116: 
     Output Location Validation Failed for: 'file:///home/pig/100/test.avro More info to follow:
    Can't redefine: Employees

    org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1002: Unable to store alias posdata
        at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1635)
        at org.apache.pig.PigServer.registerQuery(PigServer.java:575)
        at org.apache.pig.tools.grunt.GruntParser.processPig(GruntParser.java:1093)
        at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:501)
        at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:198)
        at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:173)
        at org.apache.pig.tools.grunt.Grunt.run(Grunt.java:69)
        at org.apache.pig.Main.run(Main.java:541)
        at org.apache.pig.Main.main(Main.java:156)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:212)
    Caused by: org.apache.pig.impl.plan.VisitorException: ERROR 2116: 
     Output Location Validation Failed for: 'file:///home/pig/100/test.avro More info to follow:
    Can't redefine: Employees
        at org.apache.pig.newplan.logical.rules.InputOutputFileValidator$InputOutputFileVisitor.visit(InputOutputFileValidator.java:75)
        at org.apache.pig.newplan.logical.relational.LOStore.accept(LOStore.java:66)
        at org.apache.pig.newplan.DepthFirstWalker.depthFirst(DepthFirstWalker.java:64)
        at org.apache.pig.newplan.DepthFirstWalker.depthFirst(DepthFirstWalker.java:66)
        at org.apache.pig.newplan.DepthFirstWalker.walk(DepthFirstWalker.java:53)
        at org.apache.pig.newplan.PlanVisitor.visit(PlanVisitor.java:52)
        at org.apache.pig.newplan.logical.rules.InputOutputFileValidator.validate(InputOutputFileValidator.java:45)
        at org.apache.pig.backend.hadoop.executionengine.HExecutionEngine.compile(HExecutionEngine.java:300)
        at org.apache.pig.PigServer.compilePp(PigServer.java:1380)
        at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1305)
        at org.apache.pig.PigServer.execute(PigServer.java:1297)
        at org.apache.pig.PigServer.access$400(PigServer.java:122)
        at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1630)
        ... 13 more
    Caused by: org.apache.avro.SchemaParseException: Can't redefine: Employees
        at org.apache.avro.Schema$Names.put(Schema.java:1019)
        at org.apache.avro.Schema$NamedSchema.writeNameRef(Schema.java:496)
        at org.apache.avro.Schema$RecordSchema.toJson(Schema.java:611)
        at org.apache.avro.Schema$UnionSchema.toJson(Schema.java:799)
        at org.apache.avro.Schema$RecordSchema.fieldsToJson(Schema.java:633)
        at org.apache.avro.Schema$RecordSchema.toJson(Schema.java:620)
        at org.apache.avro.Schema$UnionSchema.toJson(Schema.java:799)
        at org.apache.avro.Schema$RecordSchema.fieldsToJson(Schema.java:633)
        at org.apache.avro.Schema$RecordSchema.toJson(Schema.java:620)
        at org.apache.avro.Schema$ArraySchema.toJson(Schema.java:722)
        at org.apache.avro.Schema$UnionSchema.toJson(Schema.java:799)
        at org.apache.avro.Schema$RecordSchema.fieldsToJson(Schema.java:633)
        at org.apache.avro.Schema$RecordSchema.toJson(Schema.java:620)
        at org.apache.avro.Schema$ArraySchema.toJson(Schema.java:722)
        at org.apache.avro.Schema$UnionSchema.toJson(Schema.java:799)
        at org.apache.avro.Schema$RecordSchema.fieldsToJson(Schema.java:633)
        at org.apache.avro.Schema$RecordSchema.toJson(Schema.java:620)
        at org.apache.avro.Schema$ArraySchema.toJson(Schema.java:722)
        at org.apache.avro.Schema$UnionSchema.toJson(Schema.java:799)
        at org.apache.avro.Schema$RecordSchema.fieldsToJson(Schema.java:633)
        at org.apache.avro.Schema$RecordSchema.toJson(Schema.java:620)
        at org.apache.avro.Schema$UnionSchema.toJson(Schema.java:799)
        at org.apache.avro.Schema$RecordSchema.fieldsToJson(Schema.java:633)
        at org.apache.avro.Schema$RecordSchema.toJson(Schema.java:620)
        at org.apache.avro.Schema.toString(Schema.java:291)
        at org.apache.avro.Schema.toString(Schema.java:281)
        at org.apache.pig.builtin.AvroStorage.setOutputAvroSchema(AvroStorage.java:504)
        at org.apache.pig.builtin.AvroStorage.checkSchema(AvroStorage.java:495)
        at org.apache.pig.newplan.logical.rules.InputOutputFileValidator$InputOutputFileVisitor.visit(InputOutputFileValidator.java:65)
        ... 25 more



person BigDataMiner    schedule 08.08.2014    source источник
comment
Не могли бы вы предоставить схему или отношение и ваш код?   -  person Gaurav Phapale    schedule 09.08.2014
comment
Привет, Гаурав, спасибо за интерес. Смотрите мое обновление, пожалуйста.   -  person BigDataMiner    schedule 11.08.2014
comment
Вы пытались переименовать одно из полей «Сотрудники» во что-то другое. Судя по ошибке, очевидно, что Pig не доволен повторным использованием одного и того же поля в одной и той же схеме. Попробуйте.   -  person Gaurav Phapale    schedule 12.08.2014
comment
Спасибо, за предложение. Я решил это сегодня. Нам пришлось переопределить схему, потому что, как вы сказали, Pig не устраивает повторное использование одного и того же имени для полей, ссылающихся на записи других типов.   -  person BigDataMiner    schedule 12.08.2014


Ответы (1)


Речь идет о неоднозначности имен полей в PigLatinSchema. Я решил это, переопределив/исправив схему avro, чтобы она не содержала полей с одинаковыми именами, относящимися к разным типам записей.

person BigDataMiner    schedule 12.08.2014
comment
У меня также возникает эта проблема, если поля tro имеют одинаковый тип записи. Похоже, что Avro не может понять, что два поля имеют одинаковую схему, и пытается сгенерировать ее дважды. - person gvdm; 28.08.2017