如何加载一个文件,文件中每行有一个json数组

tvz2xvvm  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(360)

现有脚本创建文本文件,每行包含一个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 中使用jsonload,但没有效果。它并不抱怨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,它似乎可以做到这一点。
有什么想法吗?

k3bvogb1

k3bvogb11#

就像唐纳德说的,你应该在这里使用自定义项。在xplenty中,我们编写了jsonstringtobag来补充elephantbird的jsonstringtomap。

相关问题