gpt4 book ai didi

apache-pig - 通过 Pig 脚本处理 Json

转载 作者:行者123 更新时间:2023-12-04 20:50:37 24 4
gpt4 key购买 nike

我目前已开始使用 PIG 脚本处理 JSON 文件和处理数据。我使用的是 Pig 版本 0.9.3。我遇到了 PiggyBank,我认为它对在 PIG 脚本中加载和处理 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 日志文件:
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
================================================================================

如果我错了,请纠正我。谢谢

最佳答案

您可以使用 Twitter 的 Elephant Bird 处理嵌套的 json 加载:https://github.com/kevinweil/elephant-bird

a = LOAD 'file3.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad')

这会将 JSON 解析为 map http://pig.apache.org/docs/r0.11.1/basic.html#map-schema JSONArray 被解析为 map 的 DataBag。

关于apache-pig - 通过 Pig 脚本处理 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com