在pig中计数和展平

5q4ezhmt  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(453)

嗨,我有这样的数据:
{“user\u id”:“kim95”,“type”:“book”,“title”:“现代数据库系统:对象模型、互操作性和超越。”,“year”:“1995”,“publisher”:“acm press and addison wesley”,“authors”:[{“name”:“null”}],“source”:“dblp”}
{“user\u id”:“marshallo79”,“type”:“book”,“title”:“不等式:多数化理论及其应用”,“year”:“1979”,“publisher”:“academic press”,“authors”:[{“name”:“albert w。marshall“},{“name”:“ingram olkin”}],“source”:“dblp”}
{“user\u id”:“knuth86a”,“type”:“book”,“title”:“tex:the program”,“year”:“1986”,“publisher”:“addison wesley”,“authors”:[{“name”:“donald e。knuth“}],“source”:“dblp”}。。。
我想获取发布者、标题,然后对组进行计数,但我在脚本中遇到错误“列需要…”:

books = load 'data/book-seded-workings-reduced.json'
    using JsonLoader('user_id:chararray,type:chararray,title:chararray,year:chararray,publisher:chararray,authors:{(name:chararray)},source:chararray');

doc = group books by publisher;
res = foreach doc generate group,books.title,count(books.publisher);
DUMP res;

在第二个查询中,我希望有这样一个结构:(名称,年份),标题
所以我试了这个:

books = load 'data/book-seded-workings-reduced.json'
    using JsonLoader('user_id:chararray,type:chararray,title:chararray,year:chararray,publisher:chararray,authors:{(name:chararray)},source:chararray');

flat =group books by (generate FLATTEN((authors.name),year);
tab = foreach flat generate group, books.title;
DUMP tab;

但它也不起作用。。。
有什么想法吗?

tgabmvqs

tgabmvqs1#

我能看到的第一个代码中唯一的问题是“count”而不是count(大写)
如果不使用大写计数,则会出现错误
无法使用导入解析计数:

vwkv1x7d

vwkv1x7d2#

您在尝试第一个查询时遇到的错误是什么?count内置函数必须在所有caps中,不能调用count(group),group是pig生成的内部标识符。
我在运行第一个查询时得到以下结果-
(学术出版社,{(不等式:优化理论及其应用)},1)(艾迪森-韦斯利,{(特克斯:程序)},1)(acm出版社和艾迪森-韦斯利,{(现代数据库系统:对象模型、互操作性及其他)},1)
期望的格式(姓名、年份)、职称也可以这样实现-

flat = foreach books generate FLATTEN(authors.name) as authorName, year, title;
tab = group flat by (authorName, year);
finaltab = foreach tab generate group, flat.title;

相关问题