如何解码来自列的 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用数组对 API 数据进行 Json 解码?

如何使用来自 Kafka 的 Python 解码/反序列化 Avro

使用 Alamofire 解码 json 时出错

来自localstorage的JSON无法在php中解码

如何从 Codable 结构中捕获 init(来自解码器:解码器)中的错误?

Android应用程序解码来自PHP MySql数据库的JSON响应,没有特殊字符