7

フォームのファイルの場合

A B user1
C D user2
A D user3
A D user1

フィールド3の個別の値の数を計算したいcount(distinct(user1, user2,user2,user1)) = 3

次の豚のスクリプトを使用してこれを行っています

A =  load 'myTestData' using PigStorage('\t') as (a1,a2,a3); 

user_list = foreach A GENERATE $2;
unique_users = DISTINCT user_list;
unique_users_group = GROUP unique_users ALL;
uu_count = FOREACH unique_users_group GENERATE COUNT(unique_users);
store uu_count into 'output';

フィールドの個別の値の数を取得するより良い方法はありますか?

4

2 に答える 2

8

これを行うためのより最新の方法:

user_data = LOAD 'myTestData' USING PigStorage('\t') AS (a1,a2,a3);
users = FOREACH user_data GENERATE a3;
uniq_users = DISTINCT users;
grouped_users = GROUP uniq_users ALL;
uniq_user_count = FOREACH grouped_users GENERATE COUNT(uniq_users);
DUMP uniq_user_count;

これにより、ログに値(3)が残ります。

于 2013-11-05T00:40:59.653 に答える
4

ここにもう少し簡潔なものがあります。どちらがより速く実行されるかを確認することをお勧めします。

A =  LOAD 'myTestData' USING PigStorage('\t') AS (a1,a2,a3);
unique_users_group = GROUP A ALL;
uu_count = FOREACH unique_users_group {user = A.a2; uniq = distinct user; GENERATE COUNT(uniq);};
STORE uu_count INTO 'output';
于 2012-10-15T15:53:08.680 に答える