使用 Pig 计算两列之间的平均值
Calculate average between two columns using Pig
我有一个文件,其中包含代表日期和 min/max 温度值的三列。
01012010 4.5 15.9
我需要计算每一天的平均值。
使用 UDF 似乎很容易做到这一点,但我想知道没有它是否有办法做到这一点。
我设法实现了这样的事情(连接温度然后将它们展平)但对我来说它似乎太复杂了:
table = LOAD 'e7/temp.csv' USING PigStorage('\t') as (day:chararray, min:float, max:float);
day_group = FOREACH table GENERATE day, FLATTEN(TOKENIZE( CONCAT(CONCAT( (chararray)min, ','), (chararray)max) )) as minMax;
day_group_cast = FOREACH day_group GENERATE day, (float) minMax as minMax;
day_mean_group = GROUP day_group_cast BY day;
day_mean = FOREACH day_mean_group GENERATE group as day, AVG(day_group_cast.minMax) as minMax;
根据@Enrichman 的评论,下面的代码片段足以实现 objective。
temp_data = LOAD 'temp.csv' USING PigStorage(',') AS (day:chararray, min:float, max:float);
req_stats = FOREACH temp_data GENERATE day, (min+max)/2 AS avg_temp;
我有一个文件,其中包含代表日期和 min/max 温度值的三列。
01012010 4.5 15.9
我需要计算每一天的平均值。 使用 UDF 似乎很容易做到这一点,但我想知道没有它是否有办法做到这一点。
我设法实现了这样的事情(连接温度然后将它们展平)但对我来说它似乎太复杂了:
table = LOAD 'e7/temp.csv' USING PigStorage('\t') as (day:chararray, min:float, max:float);
day_group = FOREACH table GENERATE day, FLATTEN(TOKENIZE( CONCAT(CONCAT( (chararray)min, ','), (chararray)max) )) as minMax;
day_group_cast = FOREACH day_group GENERATE day, (float) minMax as minMax;
day_mean_group = GROUP day_group_cast BY day;
day_mean = FOREACH day_mean_group GENERATE group as day, AVG(day_group_cast.minMax) as minMax;
根据@Enrichman 的评论,下面的代码片段足以实现 objective。
temp_data = LOAD 'temp.csv' USING PigStorage(',') AS (day:chararray, min:float, max:float);
req_stats = FOREACH temp_data GENERATE day, (min+max)/2 AS avg_temp;