在 Pig 中解析复杂的 JSON 字符串
Posted
技术标签:
【中文标题】在 Pig 中解析复杂的 JSON 字符串【英文标题】:Parse Complex JSON String in Pig 【发布时间】:2013-02-28 05:20:44 【问题描述】:我想在 Pig 中解析一串复杂的 JSON。具体来说,我希望 Pig 将我的 JSON 数组理解为一个包而不是单个字符数组。使用 JsonLoader 时,我可以通过指定架构轻松做到这一点,如 this question。有什么方法可以让 Pig 为我找出我的架构,或者在 Pig 解析字符串时指定它?我一直在使用JsonStringToMap,但找不到指定模式的方法,或者无法让它正确理解我的 JSON 数组是一个数组而不是单个字符数组。
【问题讨论】:
【参考方案1】:我最终在Mozilla's Akela library for pig 中使用了JsonTupleMap()。它通过解析我的所有 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';
【讨论】:
你知道我在哪里可以找到编译好的jar文件吗? @FabrizioRegini 上面的链接中有使用 Maven 编译 jar 的说明。这很容易。您需要针对您的特定系统进行编译。 我在编译大象鸟时遇到了问题,有人指点我下载 jar 文件。这就是我问的原因。 源代码中可能存在用于基于平台的优化的本机标志。我强烈建议在与您将在生产中使用的环境相同的环境中进行编译,以利用这些优势。以上是关于在 Pig 中解析复杂的 JSON 字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用 mapreduce 解析 twitter json:Java、Pig
在 Objective C 中使用 RestKit 解析复杂的 JSON