如何解码来自列的 Pig 中的 JSON?
Posted
技术标签:
【中文标题】如何解码来自列的 Pig 中的 JSON?【英文标题】:How do you decode JSON in Pig that comes from a column? 【发布时间】:2014-07-21 21:19:43 【问题描述】:有很多示例说明如何使用 JsonLoader()
从文件中加载带有模式的 JSON 数据,而不是从任何其他输出中加载。
【问题讨论】:
【参考方案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
猪脚本:
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 作为地图):
-------------------------------------------------------------------------------------------------
| parsed | col1:chararray | col2:chararray | json:map(:chararray) |
-------------------------------------------------------------------------------------------------
| | foo | bar | count=1, type=another event, version=1 |
-------------------------------------------------------------------------------------------------
这个问题与How to parse a JSON string from a column with Pig重复
【讨论】:
以上是关于如何解码来自列的 Pig 中的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用来自 Kafka 的 Python 解码/反序列化 Avro