Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如何使用Pig解析列中的JSON字符串_Logging_Hadoop_Apache Pig_Bigdata - Fatal编程技术网

Logging 如何使用Pig解析列中的JSON字符串

Logging 如何使用Pig解析列中的JSON字符串,logging,hadoop,apache-pig,bigdata,Logging,Hadoop,Apache Pig,Bigdata,我有tsv日志文件,其中一列由json字符串填充 我想在Pig脚本中用JsonLoader解析该列。 我看到了许多例子,其中在每一行都只是一个json字符串的情况下使用了JsonLoader。我想跳过其他专栏,但我不知道怎么做 该文件如下所示: foo bar {"version":1; "type":"an event"; "count": 1} foo bar {"version":1; "type":"another event"; "count": 1} 我该怎

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

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

该文件如下所示:

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

我该怎么做

查看Elephantbird(Twitter的所有Hadoop工具库)-他们有一个名为JsonStringToMap的UDF,它完全满足您的需要(获取字符串并将其转换为地图)。

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

后期处理(JSON作为映射):



这是两天前提出的同一个问题:

不想用ElephantBird来解决这个问题。还有别的办法吗?我试图重新编译EB,但在某个地方卡住了。看起来建造起来不容易#不,为什么不呢?您不必编译ElephantBird。你可以在
-------------------------------------------------------------------------------------------------------
| raw     | col1:chararray    | col2:chararray    | json_string:chararray                             | 
-------------------------------------------------------------------------------------------------------
|         | foo               | bar               | {"version":1, "type":"another event", "count": 1} | 
-------------------------------------------------------------------------------------------------
| parsed     | col1:chararray    | col2:chararray    | json:map(:chararray)                     | 
-------------------------------------------------------------------------------------------------
|            | foo               | bar               | {count=1, type=another event, version=1} | 
-------------------------------------------------------------------------------------------------