我有一个复杂的json文件,看起来像这样:http://pastebin.com/4ufadbqs
我只想使用pig拉丁语从这些json对象加载几个值。我试着这样做:
mydata = LOAD 'data.json'
USING JsonLoader('id:chararray, created_at:chararray,
user: {(language:chararray)}’);
STORE mydata
INTO 'output';
但pig latin似乎只是从json中获取前3个值并保存它们(它不将列名识别为键)。有办法做到这一点吗?或者我应该在pig中列出json中的所有值,然后过滤它们吗?
1条答案
按热度按时间yc0p9oo01#
上述方法几乎没有问题
1jsonloader总是期望输入的完整模式,但您只给出了三个字段。
2jsonloader总是希望整个输入都是一行,但是您的输入是多行的。
三。jsonloader不支持嵌套模式,但您的输入包含嵌套模式。
要解决以上所有问题,您必须使用第三方库
elephant-bird jar
.从这个链接下载(elephant-bird-pig-4.1.jar和elephant-bird-hadoop-compat-4.1.jar)jar文件http://www.java2s.com/code/jar/e/elephant.htm 尝试下面的方法
我复制了您的全部输入,并格式化为一行,如下所示。
输入.json
Pig手稿:
输出:
在
elephantbird library
所有的值都是stored as key/value pair(ie MAP datatype)
,因此可以很容易地从加载的数据中提取所需的字段。在上面的pigscript中,我提取了
'id','created_at' and 'user'
根据你的需要。假设您想从'user'数据中提取一些字段(ex: 'friends_count' and 'followers_count'
),在这种情况下,您需要投影'user'
字段并提取所需的数据。下面是示例代码。Pig手稿:
输出: