对于表单的文件
A B user1
C D user2
A D user3
A D user1
Run Code Online (Sandbox Code Playgroud)
我想计算字段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';
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来计算字段的不同值?
更新的方法:
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;
Run Code Online (Sandbox Code Playgroud)
这将(3)在您的日志中保留该值.
我这里有一个更简洁的。您可能想检查哪一个运行得更快。
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';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15295 次 |
| 最近记录: |