我需要采用一些复杂的嵌套 JSON 并将其转换为制表符分隔的输出,其中输入 JSON 中的每个 ts 和 y 对都有一个唯一的输出行。我知道如何以制表符分隔格式输出,但无法以正确的方式展平 JSON。基于以下输入 JSON 和所需输出的任何建议?我正在使用 ElephantBird 加载 JSON。
我有以下输入 JSON:
{
“gateway": [
{"beer" : [
{"change_date": "change_date"},
{"type": "squirrel-pale-ale"},
{"vendor": "foo-vendor"},
{"size": "size"}
]
},
{"name": "SBS01"},
{"hw_version": "1.1"}
],
"sensors": [
[
{"info": {
"name": "fake-sensor01",
"serial_number": “fakies40911",
"type": "temperature"
}
},
{"values": [
{"ts": 1400869261, "y": 998}, // "ts" is UNIX Epoch in UTC
{"ts": 1400869276, "y": 1002}
]
}
],
[
{"info": {
"name": "fake-sensor02",
"serial_number": “fakies40944",
"type": "flow"
}
},
{"values": [
{"ts": 1400869294, "y": 54},
{"ts": 1400869303, "y": 76}
]
}
]
]
}
我可以使用这个猪脚本加载它:
register 's3://path-to-scripts/elephant-bird-core-4.5.jar';
register 's3://path-to-scripts/elephant-bird-hadoop-compat-4.5.jar';
register 's3://path-to-scripts/elephant-bird-pig-4.5.jar';
register 's3://path-to-scripts/json-simple-1.1.1.jar';
data = load 's3://path-to-data/example_record.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json:map[]);
现在我想获得为每个 ts 和 y 对展平的元组,同时保留其他属性的属性。我已经尝试过使用扁平化和从地图中引用 kv 对生成的各种语句序列,但很挣扎。寻找有关如何获得此结果的建议:
(SBS01, 1.1, change_date, squirrel-pale-ale, foo-vendor, size, fake-sensor01, fakies40911, temperature, 1400869261, 998)
(SBS01, 1.1, change_date, squirrel-pale-ale, foo-vendor, size, fake-sensor01, fakies40911, temperature, 1400869276, 1002)
(SBS01, 1.1, change_date, squirrel-pale-ale, foo-vendor, size, fake-sensor02, fakies40944, flow, 1400869294, 54)
(SBS01, 1.1, change_date, squirrel-pale-ale, foo-vendor, size, fake-sensor02, fakies40944, flow, 1400869303, 76)