2012-02-24 1 views
0

ElephantBird와 Pig를 사용하여 JSON 파일을 읽을 수 없습니다. 내가 실수를하고있는 곳을 알고 싶다.Elephantbird를 사용하여 JSON을 읽는 중 오류가 발생했습니다. - PIG

데이터 :

{ "nrcpts": "1", 
    "src": "[email protected]", 
    "sendmailid": "p6D0r0u1006229", 
    "relay": "app03.example.com", 
    "classnumber": "0", 
    "msgid": "WARQZCXAEMSSVWPPOOYZXR 
[email protected]", 
    "pid": "6229", 
    "month": "Jul", 
    "time": "20:53:00", 
    "day": "12", 
    "mailserver": "mail5", 
    "size": "57395" 
} 

코드 :

json1 = load '/user/hdetl/funnel/uetsample.dat' using com.twitter.elephantbird.pig.load.JsonLoader(); 

dat = FOREACH json1 GENERATE $0#'mailserver' AS mailserver; 
dump dat; 

오류 : 나는 JSON 로더를 사용하지 않은하지만 난 당신이 드롭 할 수 있어야 상상

Input(s): 
Failed to read data from "/user/hdetl/funnel/uetsample.dat" 

detailed error : 
Pig Stack Trace 
--------------- 
ERROR 2997: Unable to recreate exception from backed error: Error: in 

org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1066: Unable to open iterator for alias dat. Backend error : Unable to recreate exception from back 
ed error: Error: in 
     at org.apache.pig.PigServer.openIterator(PigServer.java:891) 
     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.run(Grunt.java:69) 
     at org.apache.pig.Main.run(Main.java:495) 
     at org.apache.pig.Main.main(Main.java:111) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:186) 
Caused by: org.apache.pig.backend.executionengine.ExecException: ERROR 2997: Unable to recreate exception from backed error: Error: in 
     at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.Launcher.getErrorMessages(Launcher.java:221) 
     at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.Launcher.getStats(Launcher.java:151) 
     at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher.launchPig(MapReduceLauncher.java:344) 
     at org.apache.pig.PigServer.launchPlan(PigServer.java:1314) 
     at org.apache.pig.PigServer.executeCompiledLogicalPlan(PigServer.java:1299) 
     at org.apache.pig.PigServer.storeEx(PigServer.java:996) 
     at org.apache.pig.PigServer.store(PigServer.java:963) 
     at org.apache.pig.PigServer.openIterator(PigServer.java:876) 
+0

수출 JAVA_HOME =은/usr/자바/jdk1.6.0_22 수출 PIG_CLASSPATH =은/etc/하둡/conf의 수출 PATH = $ PATH : /local/hdetl/pig-0.9.2/bin REGISTER /local/hdetl/funnel/pig-jars/json-simple-1.1.jar; REGISTER /local/hdetl/funnel/pig-jars/google-collect-1.0.jar; REGISTER '/local/hdetl/funnel/pig-jars/elephant-bird-1.2.1-SNAPSHOT.jar'; – Bharathi

+0

무엇이 당신의 질문입니까? –

+0

elephantbird와 PIG를 사용하여 JSON 파일을 읽을 수 없습니다. 나는 실수를하는 곳을 알고 싶다. – Bharathi

답변

0

너의 foreach에 0 달러. 저는 로더가 {와} 사이의 모든 것을 하나의 레코드 (터플)로 돌리고 있다고 생각합니다.

 
dat = FOREACH json1 GENERATE mailserver; 
0

꽤 오래된 게시물이지만 누군가는 비슷한 문제가있을 수 있습니다.

질문에 제공된 데이터로 입력 파일을 만들었습니다.

"msgid": "WARQZCXAEMSSVWPPOOYZXR 
[email protected]", 

을하지만 결과를 예상되지 않은 고정 :
나는 줄에 입력하기 때문에 불필요한의 텟 파일을로드 할 수 없습니다. 파일에서 모든 입력을 제거 했으므로 최종적으로 한 줄만 있습니다.

파일은로드 :

dump json1 
([time#20:53:00,msgid#[email protected],relay#app03.example.com,mailserver#mail5,month#Jul,pid#6229,classnumber#0,day#12,src#[email protected],sendmailid#p6D0r0u1006229,nrcpts#1,size#57395]) 

하고 foreach 작품 :

dat = FOREACH json1 GENERATE $0#'mailserver' AS mailserver; 
dump dat 

(mail5)