pig:如何计算分组中几个变量的分位数?

xdyibdwo  于 2021-06-21  发布在  Pig
关注(0)|答案(1)|浏览(521)

我使用的是apachedatafu(http://datafu.incubator.apache.org/docs/datafu/1.3.0/datafu/pig/stats/quantile.html)
计算数据中几个变量的分位数。
我的理解是,数据需要在调用之前进行排序 quantile .
但是,如果我需要按序列计算同一组中几个变量的分位数呢?假设分位数变量的创建发生在generate之后,那么将只考虑一个排序(最后一个排序),如下简单示例所示:

-- input: 9,10,2,3,5,8,1,4,6,7
 input = LOAD 'input' AS (val:int);

 grouped = GROUP input ALL;

 -- produces: (1,5.5,10)
 quantiles = FOREACH grouped {
   sorted = ORDER input BY val;
   GENERATE Quantile(sorted);
 }

适用于一个变量,但是如果我想要每个groupby中两个不同变量的分位数,如何修改此代码?
如果数据看起来像

group col1 col2
A     1    2   
A     3    1
B     1    0
B     9   -2

对于每一组,我想要col1和col2的分位数?

inkz8wg9

inkz8wg91#

你可以有多个 ORDER 嵌套语句中的语句 FOREACH ,例如:

x = FOREACH grouped {
  sorted_by_col1 = ORDER input BY col1;
  sorted_by_col2 = ORDER input by col2;
  GENERATE
    group,
    Quantile(sorted_by_col1.col1),
    Quantile(sorted_by_col2.col2);
}

相关问题