Pig での解決方法がわからない問題があります。製品カテゴリごとの製品タイトルを含む Hadoop のデータセット (約 400 万レコード) があります。各タイトルにはNo. Webページに表示された回数はありませんでした。クリックして商品詳細ページに移動した回数。いいえ。製品カテゴリ内のタイトルの数は異なる場合があります。
サンプルデータ -
ビデオ ゲーム|Halo 4|5400|25
ビデオ ゲーム|Forza Motorsport 4 リミテッド コレクターズ エディション|6000|10
ビデオ ゲーム|Marvel Ultimate Alliance|2000|55
カメラと写真|Pro Steadicam for GoPro HD|12000|250
カメラと写真|Hero GoPro Motorsports 1080P ワイド HD 5MP ヘルメット カメラ|10000|125
3 番目の列 (Web ページでの表示) に基づいて、各製品カテゴリ内の上位 N % のレコードを取得したいと考えています。ただし、N % は、カテゴリの重み/重要性に基づいて変更する必要があります。例えば。ビデオ ゲームの場合、上位 15 % のレコードを取得したいと考えています。カメラと写真の場合、上位 5 % などを取得したいのですが、Pig のネストされた FOREACH コード ブロック内の LIMIT 句で % または整数値を動的に設定する方法はありますか?
PRODUCT_DATA = LOAD '<PRODUCT FILE PATH>' USING PigStorage('|') AS (categ_name:chararray, product_titl:chararray, impression_cnt:long, click_through_cnt:long);
GRP_PROD_DATA = GROUP PRODUCT_DATA BY categ_name;
TOP_PROD_LIST = FOREACH GRP_PROD_DATA {
SORTED_TOP_PROD = ORDER PRODUCT_DATA BY impression_cnt DESC;
SAMPLED_DATA = LIMIT SORTED_TOP_PROD <CATEGORY % OR INTEGER VALUE>;
GENERATE flatten(SAMPLED_DATA);
}
STORE TOP_PROD_TITLE_LIST INTO '<SOME PATH>' USING PigStorage('|');
特定のグループの % または整数値を動的に (カテゴリ別に) 設定するにはどうすればよいですか? MACRO を使用することを考えましたが、NESTED FOREACH ブロック内から MACROS を呼び出すことはできません。カテゴリ名をパラメーターとして取り、% OR INTEGER 値を出力する UDF を作成し、この UDF を LIMIT 操作から呼び出すことはできますか?
SAMPLED_DATA = LIMIT SORTED_TOP_PROD categLimitVal(categ_name);
助言がありますか?Pig のバージョン 0.10 を使用しています。