使用Pig 0.11.1处理JSON时,源数据在JSON对象之间具有回车符

使用Pig 0.11.1处理JSON时,源数据在JSON对象之间具有回车符,json,apache-pig,Json,Apache Pig,我在一个文件中有一些包含多个JSON对象的源数据。对象之间没有回车符,如果我手动添加回车符,那么Pig 0.11.1 JSONLoader将分别加载每个对象,我将在Pig中获得预期的元组。如果没有回车符,它将只加载文件中的第一个JSON对象 有没有一种方法可以直接使用JSONLoader在不进行预处理的情况下加载文件中的每个对象 如果这是不可能的,是否有任何建议可以轻松地预处理文件以添加回车符(理想情况下使用Pig) 以下是文件中JSON的示例: {“值”:{“x”:447100,“y”:0},

我在一个文件中有一些包含多个JSON对象的源数据。对象之间没有回车符,如果我手动添加回车符,那么Pig 0.11.1 JSONLoader将分别加载每个对象,我将在Pig中获得预期的元组。如果没有回车符,它将只加载文件中的第一个JSON对象

有没有一种方法可以直接使用JSONLoader在不进行预处理的情况下加载文件中的每个对象

如果这是不可能的,是否有任何建议可以轻松地预处理文件以添加回车符(理想情况下使用Pig)

以下是文件中JSON的示例:

{“值”:{“x”:447100,“y”:0},“键”:“rpi/SBS_01”}
{“值”{“x”:454663,“y”:154},“键”:“rpi/SBS_01”}
{“值”:{“x”:455100,“y”:0},“键”:“rpi/SBS_01”}
{“值”:{“x”:456100,“y”:0},“键”:“rpi/SBS_01”}
{“值”:{“x”:457100,“y”:0},“键”:“rpi/SBS_01”}

我的源数据位于S3存储桶中,我正在使用ElasticMapReduce运行我的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('|');

您的JSON格式不正确;需要将其格式化为数组(请注意开头的方括号和逗号分隔键:value“dictionaries”:

您可以使用类似的工具来验证JSON


编辑:请注意,在“值”和第二行的下一个{之间也缺少一个冒号。

缺少的冒号是复制粘贴错误,很抱歉数据不正确:)。至于是否需要将值格式化为数组。我的问题是,目前我无法控制数据的生成者,它将多个JSON对象放入一个文件中,而不使用方括号或回车符。你是认真的吗?你应该联系提供商,告诉他们他们吐出了无效的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"}
]