hadoop - 如何在 Pig Latin 中每行加载一个带有 JSON 数组的文件

标签 hadoop apache-pig elephantbird

现有脚本创建文本文件,每行包含一组 JSON 对象,例如,

[{"foo":1,"bar":2},{"foo":3,"bar":4}]
[{"foo":5,"bar":6},{"foo":7,"bar":8},{"foo":9,"bar":0}]
…

我想在 Pig 中加载这些数据,分解数组并处理每个单独的对象。

我在 Twitter 的 Elephant Bird 中查看了使用 JsonLoader无济于事。它不会提示 JSON,但是在运行以下命令时我得到“成功读取 0 条记录”:
register '/tmp/elephant-bird/core/target/elephant-bird-core-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/hadoop-compat/target/elephant-bird-hadoop-compat-4.3-SNAPSHOT.jar';
register '/tmp/elephant-bird/pig/target/elephant-bird-pig-4.3-SNAPSHOT.jar';
register '/usr/local/lib/json-simple-1.1.1.jar';

a = load '/path/to/file.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad=true');
dump a;

我还尝试正常加载文件,将每一行视为包含单列字符数组,然后尝试将其解析为 JSON,但我找不到似乎可以解决问题的预先存在的 UDF。

有任何想法吗?

最佳答案

就像唐纳德说的,你应该在这里使用 UDF。在这里 Xplenty我们编写了 JsonStringToBag 来补充 ElephantBird 的 JsonStringToMap。

关于hadoop - 如何在 Pig Latin 中每行加载一个带有 JSON 数组的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19863628/

相关文章:

hadoop - Pig DUMP 被困在 GROUP 中

hadoop - 为什么我的任务不能在 Pig 中并行运行?

hadoop - 在Pig 0.16中加载json数据时,大象鸟不存在错误

twitter - 如何在 Pig 中使用 rcfilepigstorage

hadoop - HBase连接异常

hadoop - 查询未在配置单元中返回任何值

hadoop - Hadoop HBase伪模式-RegionServer在一段时间后会断开连接

azure - 在Azure Hdinsight上将数据从HDFS加载到Hive时出错

hadoop - 运行Pig时出现错误:无法找到pig-core-h2.jar。做 'ant -Dhadoopversion=23 jar',然后再试一次

json - 解析Hadoop中包含的复杂Json字符串