apache pig-foreach中使用百分比值对分组数据进行采样

zsbz8rwp  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(336)

我有一个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;

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

oyjwcjzk

oyjwcjzk1#

这里的标准技巧是在foreach之前或之后执行所需的操作(例如sample)。
在这种情况下,我认为应该可以在foreach之前的某个地方使用sample函数。

7xzttuei

7xzttuei2#

我没试过,所以不确定语法的正确性,但是如果我们试一下下面几行呢。我们基本上是在嵌套的foreach中按随机数排序,并从中选取前10%的数据:

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

相关问题