如何用pig从列解析json字符串

t3psigkw  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(463)

我有tsv日志文件,其中一列由json字符串填充。
我想用一个pig脚本中的jsonloader来解析该列。我看到了许多示例,其中jsonload用于每一行都只是一个json字符串的情况。我想跳过其他专栏,但我不知道怎么做。
文件如下所示:

foo    bar    {"version":1; "type":"an event"; "count": 1}
foo    bar    {"version":1; "type":"another event"; "count": 1}

我该怎么做?

noj0wjuj

noj0wjuj1#

查看elephantbird(twitter的所有hadoop库)-他们有一个名为jsonstringtomap的udf,它完全满足您的需要(获取一个字符串并将其转换为一个Map)。

ggazkfy8

ggazkfy82#

您正在查找elephant bird中提供的jsonstringtomap udf:https://github.com/kevinweil/elephant-bird/search?q=jsonstringtomap&ref=cmdform
示例文件:

foo     bar     {"version":1, "type":"an event", "count": 1}
foo     bar     {"version":1, "type":"another event", "count": 1}

Pig脚本:

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作为chararray/string):

-------------------------------------------------------------------------------------------------------
| raw     | col1:chararray    | col2:chararray    | json_string:chararray                             | 
-------------------------------------------------------------------------------------------------------
|         | foo               | bar               | {"version":1, "type":"another event", "count": 1} |

后处理(json作为Map):

-------------------------------------------------------------------------------------------------
| parsed     | col1:chararray    | col2:chararray    | json:map(:chararray)                     | 
-------------------------------------------------------------------------------------------------
|            | foo               | bar               | {count=1, type=another event, version=1} | 
-------------------------------------------------------------------------------------------------

两天前也提出了同样的问题:如何在pig中解码来自列的json?

相关问题