Apache PIG - 使用百分比值对 foreach 中的分组数据进行采样

Posted

技术标签:

【中文标题】Apache PIG - 使用百分比值对 foreach 中的分组数据进行采样【英文标题】:Apache PIG - Sampling grouped data in foreach using a percentage value 【发布时间】:2016-09-07 15:20:16 【问题描述】:

我有猪关系中的国家-地区数据,我试图根据每个地区的国家数量对其进行抽样。我想过滤每个地区 10% 的国家。我正在尝试为此在 FOREACH 中使用 SAMPLE,但看起来 FOREACH 中不支持 SAMPLE。

COUNTRY_FULL = LOAD 'COUNTRY_REGION' USING org.apache.hive.hcatalog.pig.HCatLoader();

COUNTRIES = FILTER COUNTRY_FULL by partition_dt=='2016-09-04';

COUNTRIES_GROUPED_BY_REGION = GROUP COUNTRIES BY region_id;

SAMPLED_DATA = FOREACH COUNTRIES_GROUPED_BY_REGION 
    SAMPLED = SAMPLE COUNTRIES 0.1;
    GENERATE FLATTEN(SAMPLED);
;

DUMP SAMPLED_DATA;

有没有办法在猪的分组关系中实现这种基于百分比的抽样?

【问题讨论】:

【参考方案1】:

这里的标准技巧是在 foreach 之前或之后执行所需的操作(例如示例)。

在这种情况下,我会说应该可以在 foreach 之前的某个地方使用示例函数。

【讨论】:

【参考方案2】:

还没有尝试过,所以不确定语法的正确性,但是如果我们尝试以下几行会怎样。我们基本上在嵌套的 foreach 中按一个随机数排序,然后选择前 10% 的数据:

data = countries, RANDOM() as random;
orderedData = ORDER data BY random;
sampledData = LIMIT orderedData COUNT(data)/10;
GENERATE FLATTEN(sampledData);

【讨论】:

以上是关于Apache PIG - 使用百分比值对 foreach 中的分组数据进行采样的主要内容,如果未能解决你的问题,请参考以下文章

在 OBIEE 中使用计算项目时如何获得正确的百分比值?

使用 MySQL 计算百分比值

如何使 ConstraintLayout 使用百分比值?

使用百分比值填充 flexbox 项

Spring JPA:如何为百分比值建模

正则表达式验证以接受百分比值