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



我有一个搜索日志,其中包含时间、地点和查询字段。我想从一个特定的地点和一个特定时间之间找出查询量最大的单词。所有字段,即日期、时间、query_String都是字符数组。我有下面的猪脚本,但它没有做什么是必需的。

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点之间,你好从美国搜索了4次"。我基本上被Count()函数弄糊涂了。对pig来说相对较新。我相信我的count()是在计算我的记录总数。

您的查询看起来是正确的,COUNT(Clients)返回包中来自Clients并属于该组的记录数。要查看它,您可以从"wth_COUNT"语句中删除COUNT,并将结果保存到文件中,然后查看它。

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

潜在的问题可能是,您在分组依据中使用了日期和时间列,并且它们产生了太多的分组。为了缓解这种情况,您可以编写一个java静态函数,该函数获取日期和时间,并返回该范围的单个值,例如,2012年7月12日,14.05.03转换为"2012年7日14小时",2012年07月12日、14.05.05转换为"12年7月14小时"。这将创建一个覆盖下午2点和3点时间间隔的密钥,并将Clinets的所有记录放入该组的包中。

最新更新