我有一个搜索日志与字段即时间,地点和查询。我想从一个特定的时间和地点中找出被查询最多的单词。所有字段,即日期、时间、查询字符串都是字符。我有下面的Pig脚本,但它没有做什么是必需的。
Data = LOAD 'data' USING CustomPigStorage();
FClients = FILTER Data BY NOT(country is null);
Clients = FOREACH FClients GENERATE date,time, country,query_string as query;
grp = group Clients by (query, country, date, time);
wth_count = foreach grp generate FLATTEN(group), COUNT(Clients) as count;
例如,我希望结果是“下午2点到3点之间,hello从美国被搜索了4次”。我基本上被count()函数搞糊涂了。对pig来说比较陌生。我相信我的count()在计算我的记录总数。
1条答案
按热度按时间ndh0cuux1#
您的查询看起来是正确的,count(clients)返回包中来自客户机并属于该组的记录数。要查看它,您可以从“wth\u count”语句中删除count,并将结果保存到一个文件中,然后再查看它。
潜在的问题可能是,您在groupby中使用了date和time列,它们生成的组太多。为了缓解这种情况,您可以编写一个java静态函数,获取日期和时间,并返回该范围的单个值,例如12-07-2012,14.05.03被转换为“12-07-2012 14h”,12-07-2012,14.05.05被转换为“12-07-2012 14h”。这将创建一个覆盖时间间隔2pm和3pm的键,并将clinets的所有记录放入该组的包中。