您正在寻找 Elephant Bird 中提供的 JsonStringToMap UDF:
样本文件:
foo bar {"version":1, "type":"an event", "count": 1}
foo bar {"version":1, "type":"another event", "count": 1}
猪脚本:
REGISTER /path/to/elephant-bird.jar;
DEFINE JsonStringToMap com.twitter.elephantbird.pig.piggybank.JsonStringToMap();
raw = LOAD '/tmp/file.tsv' USING PigStorage('\t') AS (col1:chararray,col2:chararray,json_string:chararray);
parsed = FOREACH raw GENERATE col1,col2,JsonStringToMap(json_string);
ILLUSTRATE parsed; -- Just to show the output
预处理(JSON 作为字符数组/字符串):
-------------------------------------------------------------------------------------------------------
| raw | col1:chararray | col2:chararray | json_string:chararray |
-------------------------------------------------------------------------------------------------------
| | foo | bar | {"version":1, "type":"another event", "count": 1} |
后处理(JSON 作为地图):
-------------------------------------------------------------------------------------------------
| parsed | col1:chararray | col2:chararray | json:map(:chararray) |
-------------------------------------------------------------------------------------------------
| | foo | bar | {count=1, type=another event, version=1} |
-------------------------------------------------------------------------------------------------
两天前有人问过同样的问题:如何在 Pig 中解码来自列的 JSON? https://stackoverflow.com/questions/24874989/how-do-you-decode-json-in-pig-that-comes-from-a-column/24925809#24925809