我想在Pig中解析一串复杂的JSON。具体来说,我希望Pig将我的JSON数组理解为一个包而不是单个chararray。使用JsonLoader时,我可以通过指定架构轻松完成此操作,如this question中所示。有没有办法让Pig为我找出我的架构,或者在Pig解析字符串时指定它?我一直在使用JsonStringToMap,但找不到指定Schema的方法,或者让它正确理解我的JSON数组是一个数组而不是一个chararray。
答案 0 :(得分:4)
我在JsonTupleMap()中使用Mozilla's Akela library for pig结束了。它通过解析我的所有JSON来完成我想要的,即使它很复杂,即使我不提供模式也可以这样做。如果您遇到与我相同的问题,请使用它。
使用示例:
REGISTER '/path/to/akela-0.5-SNAPSHOT.jar';
DEFINE JsonTupleMap com.mozilla.pig.eval.json.JsonTupleMap();
loaded = LOAD '$INPUT' AS (json_string:chararray, ...);
jsonified = FOREACH loaded GENERATE JsonTupleMap(json_string) AS json:map[], ...;
some_generate = FOREACH jsonified GENERATE json#'key'#'sub_key';