大多数出现在特定时间之间的搜索

kgsdhlau  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(259)

我有一个搜索日志与字段即时间,地点和查询。我想从一个特定的时间和地点中找出被查询最多的单词。所有字段,即日期、时间、查询字符串都是字符。我有下面的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()在计算我的记录总数。

ndh0cuux

ndh0cuux1#

您的查询看起来是正确的,count(clients)返回包中来自客户机并属于该组的记录数。要查看它,您可以从“wth\u count”语句中删除count,并将结果保存到一个文件中,然后再查看它。

wth_count = foreach grp generate group, Clients;
store wth_count into 'path';

潜在的问题可能是,您在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的所有记录放入该组的包中。

相关问题