如何在Pig中统计特定国家(如美国)的职业及年龄分组数量
在Pig中统计美国用户的职业分布与年龄分组数量
需求说明
从用户数据中筛选出美国(loc='us')的记录,分别统计:
- 各职业的用户数量
- 各年龄(或自定义年龄分组)的用户数量
完整Pig Latin实现
1. 筛选美国地区用户
首先从原始数据集customer中过滤出美国用户:
filter_us_data = FILTER customer BY loc == 'us';
2. 统计各职业的用户数量
按职业字段分组后,计算每组的用户数:
-- 按职业分组 group_by_occupation = GROUP filter_us_data BY occupation; -- 生成职业-数量统计结果 occupation_count = FOREACH group_by_occupation GENERATE group AS occupation, COUNT(filter_us_data) AS user_count;
3. 统计各年龄的用户数量
按单个年龄值分组统计:
-- 按年龄分组 group_by_age = GROUP filter_us_data BY age; -- 生成年龄-数量统计结果 age_count = FOREACH group_by_age GENERATE group AS age, COUNT(filter_us_data) AS user_count;
(可选)自定义年龄区间分组统计
如果需要按年龄区间(如18-25、26-35等)统计,先添加分组字段再统计:
-- 给用户标记年龄分组 age_grouped_data = FOREACH filter_us_data GENERATE *, CASE WHEN age >= 18 AND age <= 25 THEN '18-25' WHEN age >= 26 AND age <= 35 THEN '26-35' WHEN age >= 36 AND age <= 45 THEN '36-45' ELSE '46+' END AS age_group; -- 按年龄区间分组统计 group_by_age_group = GROUP age_grouped_data BY age_group; age_group_count = FOREACH group_by_age_group GENERATE group AS age_group, COUNT(age_grouped_data) AS user_count;
结果查看
使用DUMP命令查看统计结果:
DUMP occupation_count; -- 查看职业统计 DUMP age_count; -- 查看单年龄统计 DUMP age_group_count; -- 查看年龄区间统计
注意事项
你提供的原始代码中,COUNT(customer)存在错误,应该改为COUNT(filter_data)(对应分组后的关系名),否则会因找不到customer关系报错。
内容的提问来源于stack exchange,提问作者ABHI
相关产品推荐
相关产品推荐

