如何加载包含JSON字段的TSV?

如何加载包含JSON字段的TSV?,json,apache-pig,tsv,Json,Apache Pig,Tsv,我试图加载一个模式主要是TSV(制表符分隔值)的文件,但其中一个字段是JSON值。pig latin似乎有用于制表符(或其他)分隔值的TextLoader,以及用于JSON的JsonLoader 具体而言,每行数据的格式如下所示: date\tevent_name\tevent_details\n 其中event_details是一个JSON格式的字符串。其他的只是字符数组 加载此数据的最简单方法是什么 注意:我使用的是Pig版本0.11.1。(在做了大量研究之后,下面是答案:) 从注册表命令

我试图加载一个模式主要是TSV(制表符分隔值)的文件,但其中一个字段是JSON值。pig latin似乎有用于制表符(或其他)分隔值的TextLoader,以及用于JSON的JsonLoader

具体而言,每行数据的格式如下所示:

date\tevent_name\tevent_details\n
其中event_details是一个JSON格式的字符串。其他的只是字符数组

加载此数据的最简单方法是什么

注意:我使用的是Pig版本0.11.1。

(在做了大量研究之后,下面是答案:)

从注册表命令所需的中下载必要的库

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;

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

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