ApachePig—使用Pig0.11.1处理json,源数据在json对象之间有回车符

vhmi4jdf  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(348)

我在一个文件中有一些包含多个json对象的源数据。对象之间没有回车符,如果我手动添加回车符,那么pig0.11.1jsonloader将分别加载每个对象,并在pig中获得预期的元组。如果没有回车符,它将只加载文件中的第一个json对象。
有没有一种方法可以直接使用jsonload加载文件中的每个对象而不进行预处理?
如果这是不可能的任何建议,很容易预处理文件,以添加回车(理想情况下使用Pig)?
以下是文件中json的示例: {"values":{"x":447100,"y":0},"key":"rpi/SBS_01"} {"values" {"x":454663,"y":154},"key":"rpi/SBS_01"} {"values":{"x":455100,"y":0},"key":"rpi/SBS_01"} {"values":{"x":456100,"y":0},"key":"rpi/SBS_01"} {"values":{"x":457100,"y":0},"key":"rpi/SBS_01"} 我的源数据在一个s3桶中,我正在使用elasticmapreduce运行我的pig作业。
当前Pig脚本:

a = load '$INPUT' using JsonLoader('values:(x:long,y:int),sbsid:chararray');
b = foreach a generate values.x, values.y, sbsid;
c = filter b by $1 > 0;
d = distinct c;
e = order d by $0 asc;
store d into '$OUTPUT' using PigStorage('|');
gab6jxml

gab6jxml1#

你的json格式不正确;它需要格式化为一个数组(注意开始的方括号和逗号分隔)key:value “词典”:

[
    {"values":{"x":447100,"y":0},"key":"rpi/SBS_01"},
    {"values":{"x":454663,"y":154},"key":"rpi/SBS_01"},
    {"values":{"x":455100,"y":0},"key":"rpi/SBS_01"},
    {"values":{"x":456100,"y":0},"key":"rpi/SBS_01"},
    {"values":{"x":457100,"y":0},"key":"rpi/SBS_01"}
]

可以使用jsonlint之类的工具来验证json。
edit:请注意,在第二行的“values”和下一个{之间也缺少冒号。

相关问题