【问题标题】:Processing Json data into pig将Json数据处理成pig
【发布时间】:2018-02-24 03:40:01
【问题描述】:

我有一个要求,我需要将 Json 数据加载到 pig 中,但似乎存在一些我无法加载数据的问题。下面是示例数据结构 -

[{

  "id": 1,

  "first_name": "Lakshmi",

  "last_name": "P",

  "email": "xxx@yyy.com",

  "gender": "Female",

  "ip_address": "26.58.193.2"

}, {

  "id": 2,

  "first_name": "Syam",

  "last_name": "Prasad",

  "email": "sp@yyy.com",

  "gender": "Male",

  "ip_address": "229.179.4.212"

}, {

  "id": 3,

  "first_name": "ABC",

  "last_name": "CDE",

  "email": "abc@cde.com",

  "gender": "Female",

  "ip_address": "180.66.162.255"

}, {

  "id": 4,

  "first_name": "FGS",

  "last_name": "IJK",

  "email": "lmn@opq.com",

  "gender": "Male",

  "ip_address": "67.76.188.26"

}]

我尝试使用 JsonLoader 加载数据,如下面的代码 -

--inidata1 = load 'inputData1.json' using JsonStorage('\n');
--REGISTER 'piggybank-0.15.0.jar';
inidata = load 'inputData1.json' using JsonLoader('id:int,first_name:chararray,last_name:chararray,email:chararray,gender:chararray,ip_address:$

madata = foreach inidata generate group, FLATTEN(inidata);

dump madata;

--filterdata = foreach inidata generate id,first_name,last_name,email,gender,ip_address;

--dump filterdata;
--filterdata = foreach inidata generate id,gender,first_name,last_name;

--selecteddata = filter inidata by (gender=='Male') OR (last_name=='Prasad');

--dump selecteddata;
--store selecteddata into 'JSON-DATA_input';

如果有解决办法,谁能分享一下?

【问题讨论】:

  • “无法加载”是什么意思 - 错误消息、错误结果、没有任何反应?

标签: apache-pig


【解决方案1】:

JsonLoader 期望每行数据是一个由换行符分隔的 json 对象,因此您的数据看起来像:

{  "id": 1,  "first_name": "Lakshmi",  "last_name": "P",  "email": "xxx@yyy.com",  "gender": "Female",  "ip_address": "26.58.193.2"}
{  "id": 2,  "first_name": "Syam",  "last_name": "Prasad",  "email": "sp@yyy.com",  "gender": "Male",  "ip_address": "229.179.4.212"}

相反,你将它包装在一个数组中——根据我的测试,我认为 pig 的 JsonLoader 甚至可以在不给它一个键并将它包装在一个 json 对象中的情况下加载它。

这个例子对我很有帮助:http://joshualande.com/read-write-json-apache-pig

此外,如果您发布的代码被正确复制,则它的格式不正确:

inidata = load 'inputData1.json' using JsonLoader('id:int,first_name:chararray,last_name:chararray,email:chararray,gender:chararray,ip_address:$

没有正确结束,应该更像:

inidata = load 'inputData1.json' using JsonLoader('id:int,first_name:chararray,last_name:chararray,email:chararray,gender:chararray,ip_address:chararray');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-17
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多