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

时间:2012-07-13 19:57:04

标签: search count apache-pig

我有一个搜索日志,其中包含时间,地点和查询等字段。我希望在特定时间之间找到特定地点中查询最多的单词。所有字段,即日期,时间,query_String都是chararrays。我有下面的猪脚本,但它没有做到所需。

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()函数感到困惑。相对来说是猪新手。我相信我的count()在这里计算我的记录总数。

1 个答案:

答案 0 :(得分:0)

您的查询看起来正确,COUNT(客户端)返回包中的记录数,来自客户端并属于该组。要查看它,您可以从“wth_count”语句中删除COUNT并将结果保存到文件中,而不是查看它。

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

您可能遇到的问题可能是您在组中使用了日期和时间列,并且它们生成了太多组。为了缓解这个问题,您可以编写一个获取日期和时间的java静态函数,并返回该范围的单个值,例如12-07-2012,14.05.03转换为“12-07-2012 14h”和12-07 -2012,14.05.05进入“12-07-2012 14h”。这将创建一个覆盖下午2点和下午3点的时间间隔的密钥,并将Clinets中的所有记录放入该组的包中。