2012-06-14 2 views
5

저는 현재 PIG 스크립트를 사용하여 JSON 파일 작업과 데이터 처리를 시작했습니다. 나는 돼지 버전 0.9.3을 사용하고 있습니다. 나는 PIG 스크립트에서 json 파일을로드하고 처리하는 데 유용 할 것이라고 생각했던 PiggyBank를 발견했습니다.돼지 스크립트를 통한 Json 처리

저는 ANT를 통해 piggybank.jar을 빌드했습니다. 나중에 Java File을 컴파일하고 piggybank.jar를 업데이트했습니다. 주어진 예제 json 파일을 실행하려고했습니다.

나는 간단한 PIGSCRIPT와 각각의 JSON을 다음과 같이 작성했다.

REGISTER piggybank.jar 
a = LOAD 'file3.json' using org.apache.pig.piggybank.storage.JsonLoader() AS (json:map[]); 
b = foreach a GENERATE flatten(json#'menu') AS menu; 
c = foreach b generate flatten(menu#'popup') as popup; 
d = foreach c generate flatten(popup#'menuitem') as menu; 
e = foreach d generate flatten(menu#'value') as val; 
DUMP e; 

file3.json 
{ "menu" : { 
    "id" : "file", 
    "value" : "File", 
    "popup": { 
     "menuitem" : [ 
     {"value" : "New", "onclick": "CreateNewDoc()"}, 
     {"value" : "Open", "onclick": "OpenDoc()"}, 
     {"value" : "Close", "onclick": "CloseDoc()"} 
     ] 
    } 
}} 

나는 런타임 중에 다음과 같은 예외를 얻을 :

org.apache.pig.backend.executionengine.ExecException: ERROR 6018: Error while reading input - Could not json-decode string: { "menu" : { 
    at org.apache.pig.piggybank.storage.JsonLoader.parseStringToTuple(JsonLoader.java:127) 

돼지 로그 파일 : 만약 내가 잘못

Pig Stack Trace 
--------------- 
ERROR 1066: Unable to open iterator for alias e 

org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias e 
     at org.apache.pig.PigServer.openIterator(PigServer.java:901) 
     at org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:655) 
     at org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:303) 
     at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:188) 
     at org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:164) 
     at org.apache.pig.tools.grunt.Grunt.exec(Grunt.java:84) 
     at org.apache.pig.Main.run(Main.java:561) 
     at org.apache.pig.Main.main(Main.java:111) 
     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:616) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:156) 
Caused by: java.io.IOException: Job terminated with anomalous status FAILED 
     at org.apache.pig.PigServer.openIterator(PigServer.java:893) 
     ... 12 more 
================================================================================ 

저를 해결하세요. 감사합니다

+0

[ERROR 1066 : 별칭에 대한 이터레이터를 열 수 없습니다.] (http://stackoverflow.com/questions/34495085/error-1066-unable-to-open-iterator-for- alias-in-pig-generic-solution)은 일반적인 솔루션입니다 (http://stackoverflow.com/a/34495086/983722). –

답변