【发布时间】:2016-11-12 19:47:00
【问题描述】:
我想将 Billionaires JSON 数据集解析成 Pig。可以在 here 找到 JSON 文件。
以下是每个条目的内容:
{
"wealth": {
"worth in billions": 1.2,
"how": {
"category": "Resource Related",
"from emerging": true,
"industry": "Mining and metals",
"was political": false,
"inherited": true,
"was founder": true
},
"type": "privatized and resources"
},
"company": {
"sector": "aluminum",
"founded": 1993,
"type": "privatization",
"name": "Guangdong Dongyangguang Aluminum",
"relationship": "owner"
},
"rank": 1372,
"location": {
"gdp": 0.0,
"region": "East Asia",
"citizenship": "China",
"country code": "CHN"
},
"year": 2014,
"demographics": {
"gender": "male",
"age": 50
},
"name": "Zhang Zhongneng"
}
尝试 1
我尝试在 grunt 中使用以下命令加载此数据:
billionaires = LOAD 'billionaires.json' USING JsonLoader('wealth: (价值数十亿:double,如何:(类别:chararray,来自 新兴:chararray,行业:chararray,政治:chararray, 继承:chararray,创始人:chararray),类型:chararray),公司: (sector:chararray,founded:int,type:chararray,name:chararray,relationship:chararray),rank:int,location:(gdp:double,region:chararray,citizenship:chararray,country 代码:chararray),年份:int,人口统计:(性别:chararray,年龄:int), 名称:chararray');
然而,这给了我错误:
错误 org.apache.pig.tools.grunt.Grunt - 错误 1200:不匹配的输入 'in' 期望 RIGHT_PAREN
尝试 2
接下来我尝试使用 Twitter 的大象鸟项目的加载程序,名为 com.twitter.elephantbird.pig.load.JsonLoader。 Here 是此 UDF 的代码。这就是我所做的:
billionaires = LOAD 'billionaires.json' USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json:map[]);
names = foreach billionaires generate json#'name' AS name;
dump names;
现在它运行了,我没有收到任何错误!但是什么都没有显示。我得到如下输出:
输入:成功读取 0 条记录(1445335 字节): “hdfs://localhost:9000/user/purak/billionaires.json”
输出:成功将 0 条记录存储在: "hdfs://localhost:9000/tmp/temp-1399280624/tmp-477607570"
计数器:写入的总记录数:0 写入的总字节数:0 可溢出 内存管理器溢出计数:0 主动溢出的包总数:0 总计 主动泄露的记录:0
工作 DAG:job_1478889184960_0005
我在这里做错了什么?
【问题讨论】:
标签: json hadoop apache-pig elephantbird