Apache PIGは、このようなタスクに適しています。例を参照してください:
inpt = load '~/pig_data/pig_fun/input/group.txt' as (amnt:double, id:chararray,c2:chararray);
grp = group inpt by id;
mean = foreach grp {
sum = SUM(inpt.amnt);
count = COUNT(inpt);
generate group as id, sum/count as mean, sum as sum, count as count;
};
amnt列のデータ型は、SUM関数PIGのどの実装が呼び出すかに影響するため、特に注意してください。
PIGは、SQLでは不可能なことも実行できます。内部結合を使用せずに、各入力行に対して平均を設定できます。これは、標準偏差を使用してzスコアを計算する場合に役立ちます。
mean = foreach grp {
sum = SUM(inpt.amnt);
count = COUNT(inpt);
generate FLATTEN(inpt), sum/count as mean, sum as sum, count as count;
};
FLATTEN(inpt)がトリックを実行します。これで、グループの平均、合計、およびカウントに貢献した元の金額にアクセスできます。
更新1:
分散と標準偏差の計算:
inpt = load '~/pig_data/pig_fun/input/group.txt' as (amnt:double, id:chararray, c2:chararray);
grp = group inpt by id;
mean = foreach grp {
sum = SUM(inpt.amnt);
count = COUNT(inpt);
generate flatten(inpt), sum/count as avg, count as count;
};
tmp = foreach mean {
dif = (amnt - avg) * (amnt - avg) ;
generate *, dif as dif;
};
grp = group tmp by id;
standard_tmp = foreach grp generate flatten(tmp), SUM(tmp.dif) as sqr_sum;
standard = foreach standard_tmp generate *, sqr_sum / count as variance, SQRT(sqr_sum / count) as standard;
2つのジョブを使用します。私はそれを1つで行う方法を理解していません、うーん、それにもっと時間を費やす必要があります。