gpt4 book ai didi

logging - 如何使用 Pig 从列中解析 JSON 字符串

转载 作者:可可西里 更新时间:2023-11-01 14:19:21 24 4
gpt4 key购买 nike

我有 tsv 日志文件,其中一列由 json 字符串填充。

我想在 Pig 脚本中使用 JsonLoader 解析该列。我看到很多例子,在每行只有一个 json 字符串的情况下使用 JsonLoader。我想跳过其他列,但我不知道该怎么做。

文件看起来像这样:

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

我该怎么做?

最佳答案

您正在寻找象鸟中提供的 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 作为字符数组/字符串):

-------------------------------------------------------------------------------------------------------
| 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} |
-------------------------------------------------------------------------------------------------

这是两天前提出的同一个问题:How do you decode JSON in Pig that comes from a column?

关于logging - 如何使用 Pig 从列中解析 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23812265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com