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

时间:2016-09-07 15:20:17

标签: hadoop apache-pig

我有一个猪关系的国家/地区数据,我试图根据每个地区的国家数量进行抽样。我想过滤每个地区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;

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

没有尝试过,所以不确定语法的正确性,但如果我们尝试以下几行的话会怎样。我们基本上在随机数字的内部对嵌套的foreach进行排序,然后选择这些数据的前10%:

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