0

時間、場所、クエリのフィールドを含む検索ログがあります。特定の時間の間に特定の場所から最もクエリされた単語を見つけたいです。date、time、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() は、私が持っているレコードの総数を数えていると思います。

4

1 に答える 1

0

クエリは正しいように見えます。COUNT(Clients) は、Clients から取得され、グループに属するバッグ内のレコードの数を返します。それを確認するには、「wth_count」ステートメントから COUNT を削除し、結果をファイルに保存してから調べます。

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

潜在的な問題は、group by で日付と時刻の列を使用していて、生成されるグループが多すぎるという事実にある可能性があります。これを軽減するために、日付と時刻を取得し、範囲の単一の値を返す Java 静的関数を作成できます。 -2012 年 14.05.05 を "12-07-2012 14h" に。これにより、午後 2 時と午後 3 時の時間間隔をカバーするキーが作成され、Clinets からのすべてのレコードがそのグループのバッグに入れられます。

于 2012-07-14T14:42:42.223 に答える