我有一个文件“error_data.txt”,如下所示:
10474 3.0 2013-05-01 7
10474 94.0 2013-05-01 3
10538 72.0 2013-05-01 15
11001 95.0 2013-05-01 248
13113 78.0 2013-05-01 18
13116 53.0 2013-05-01 4
13116 95.0 2013-05-01 1
13122 89.0 2013-05-01 2
10001 56.0 2013-05-02 7
10413 61.0 2013-05-02 6
.........
.........
这就是我现在所拥有的,它运作良好:
error_data = LOAD 'error_data.txt' AS (ppapi_error_code:int, api_version:chararray, day:chararray, count:long);
filtered_data = FILTER error_data BY api_version=='61.0';
grouped_data = GROUP filtered_data BY day;
grouped_count = FOREACH grouped_data GENERATE group AS day, SUM(filtered_data.count) AS error_count;
STORE grouped_count INTO 'out_1';
现在我要做的是过滤grouped_count
那些error_count
大于平均值的值。
我已获得如下平均值:
grouped_count_bag = GROUP grouped_count ALL;
average = FOREACH grouped_count_bag GENERATE AVG(grouped_count.error_count);
当我DUMP
时,我将元组中的值设为(578.9444444444445)
。我现在能够使用值
filtered_grouped_count = FILTER grouped_count BY (error_count>578.9444444444445);
但我想以
的方式做到这一点filtered_grouped_count = FILTER grouped_count BY (error_count>average);
似乎不被允许。非常感谢任何帮助。
答案 0 :(得分:1)
average = FOREACH grouped_count_bag GENERATE AVG(grouped_count.error_count) AS avg;
grouped_count_average = CROSS grouped_count, average;
filtered_grouped_count = FILTER grouped_count_average BY (error_count>avg);
我知道CROSS看起来很浪费,但据我所知,这是唯一的方法。