You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Pig中统计分组后WIC与WICcash列的Y值总数?

搞定Pig统计需求:计算Douglas县WIC相关列的Y总数

我来帮你实现这个统计需求,你只需要在现有代码基础上添加几步计算逻辑就行,下面分两种实现方式给你讲解:

方式一:先计算单条记录的Y数,再分组求和(更清晰易维护)

-- 1. 加载原始数据
load_data = LOAD 'PigPrograms/Markets/DATA_GOV_US_Farmers_Market_DataSet.csv' USING PigStorage(',') as (FMID:long,County:chararray, WIC:chararray, WICcash:chararray);

-- 2. 新增:给每条记录计算WIC和WICcash列中Y的数量
count_y_per_record = FOREACH load_data GENERATE 
    County,
    -- 三元判断:是Y就加1,否则加0,两个列的结果相加
    (WIC == 'Y' ? 1 : 0) + (WICcash == 'Y' ? 1 : 0) as single_row_y_count;

-- 3. 按County分组,对每个县的Y总数求和
county_total = GROUP count_y_per_record BY County;
final_result = FOREACH county_total GENERATE 
    group as County,
    SUM(count_y_per_record.single_row_y_count) as total_y;

-- 4. 筛选出Douglas县的结果
douglas_result = FILTER final_result BY County == 'Douglas';

-- 输出结果,就是你要的Douglas 3
DUMP douglas_result;

方式二:直接在已筛选的分组上计算(更紧凑)

如果不想多一步单条记录计算,也可以直接在你已经筛选好的Douglas分组上做统计:

-- 你原有的加载、分组、筛选步骤
load_data = LOAD 'PigPrograms/Markets/DATA_GOV_US_Farmers_Market_DataSet.csv' USING PigStorage(',') as (FMID:long,County:chararray, WIC:chararray, WICcash:chararray);
group_markets_by_county = GROUP load_data BY County;
filter_county = FILTER group_markets_by_county BY group == 'Douglas';

-- 新增:直接对分组内的所有记录计算Y的总数
calculate_total = FOREACH filter_county GENERATE 
    group as County,
    -- 对分组里的每条记录计算Y数,再求和
    SUM( (load_data.WIC == 'Y' ? 1 : 0) + (load_data.WICcash == 'Y' ? 1 : 0) ) as total_y;

DUMP calculate_total;

关键逻辑说明

两种方式的核心都是用三元运算符判断每个列是否为Y,转化为数值后求和:

  • (WIC == 'Y' ? 1 : 0):如果WIC是Y就返回1,否则0
  • 两个列的数值相加得到单条记录的Y数量,再用SUM()函数对整个分组的数值求和,就得到了Douglas县的总Y数3。

运行任意一种代码,最终都会输出(Douglas,3),完全符合你的期望。

内容的提问来源于stack exchange,提问作者Binayak Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:25:13