我有一个猪关系中的国家-地区数据,我试图根据每个地区的国家数量进行抽样。我想从每个地区过滤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;
有没有办法在猪的分组关系中实现这种基于百分比的抽样?
发布于 2016-09-14 11:17:52
这里的标准技巧是在foreach之前或之后执行所需的操作(例如,sample)。
在这种情况下,我认为应该可以在foreach之前的某个地方使用sample函数。
发布于 2018-04-18 15:11:52
我还没有尝试过,所以不确定语法的正确性,但是如果我们在以下几行尝试一些东西会怎么样?我们基本上是在嵌套的foreach中对一个随机数进行排序,并选取该数据的前10%:
data = countries, RANDOM() as random;
orderedData = ORDER data BY random;
sampledData = LIMIT orderedData COUNT(data)/10;
GENERATE FLATTEN(sampledData);
https://stackoverflow.com/questions/39373773
复制