如何加载包含pig拉丁语json字段的tsv?

3vpjnl9f  于 2021-06-24  发布在  Pig
关注(0)|答案(2)|浏览(332)

我试图加载一个模式主要是tsv(tab分隔值)的文件,但其中一个字段是json值。似乎pig latin有用于tab(或其他)分隔值的textloader,以及用于json的jsonloader。。。
特别是,每行数据的格式如下所示:

date\tevent_name\tevent_details\n

其中event\u details是json格式的字符串。其他的只是字符数组。
加载此数据的最简单方法是什么?
注意:我使用的是pig版本0.11.1。

bkhjykvo

bkhjykvo1#

(在做了大量的研究之后,答案是:)
从下载必要的库http://mvnrepository.com/ 寄存器命令所需。
Pig的脚本如下:

register 'libs/elephant-bird-core-4.1.jar';
register 'libs/elephant-bird-pig-4.1.jar';
register 'libs/guava-14.0.1.jar';
register 'libs/json-simple-1.1.1.jar';
register 'libs/piggybank.jar';

define decode_json com.twitter.elephantbird.pig.piggybank.JsonStringToMap();

e1 = load '$filename' using PigStorage() as (
    date: chararray,
    event_name: chararray,
    event_details_str: chararray,
);

-- Remove the header row:
e2 = filter e1 by not date matches '.*DATE';

-- Convert the event_details from a JSON string to a map:
events = foreach e2 generate *, decode_json(event_details_str) as event_details;
mhd8tkvw

mhd8tkvw2#

mbells的答案很好,我一直在努力的一件事是如何检索Map值。下面是从事件Map检索key1、key2的示例。

fields = FOREACH events GENERATE events#'key1', events#'key2';

相关问题