gpt4 book ai didi

dynamic - 如何在 Pig 中动态获取组内的前 N% 记录

转载 作者:行者123 更新时间:2023-12-02 21:52:26 27 4
gpt4 key购买 nike

我有一个问题,我不确定如何在 Pig 中解决。我在 Hadoop 上有一个数据集(大约 400 万条记录),其中包含按产品类别划分的产品标题。每个标题都有编号。它出现在网页上的次数,没有。点击它进入产品详细信息页面的次数。没有。产品类别中的标题可能会有所不同。

样本数据 -

电子游戏|光环 4|5400|25
电子游戏|Forza Motorsport 4 限量珍藏版|6000|10
电子游戏|漫威终极联盟|2000|55
相机和照片|适用于 GoPro HD 的专业斯坦尼康|12000|250
相机和照片|Hero GoPro Motorsports 1080P 宽高清 5MP Helm 相机|10000|125

我想根据第三列(网页上的外观)获取每个产品类别中前 N% 的记录。但是,N % 必须根据类别的权重/重要性而有所不同。例如。对于电子游戏,我想获得前 15% 的记录;对于相机和照片,我想获得前 5% 等。有没有办法在 Pig 的嵌套 FOREACH 代码块内的 LIMIT 子句中动态设置 % 或整数值?
PRODUCT_DATA = LOAD '<PRODUCT FILE PATH>' USING PigStorage('|') AS (categ_name:chararray, product_titl:chararray, impression_cnt:long, click_through_cnt:long);GRP_PROD_DATA = GROUP PRODUCT_DATA BY categ_name;TOP_PROD_LIST = FOREACH GRP_PROD_DATA {

                  SORTED_TOP_PROD = ORDER PRODUCT_DATA BY impression_cnt DESC;
SAMPLED_DATA = LIMIT SORTED_TOP_PROD <CATEGORY % OR INTEGER VALUE>;
GENERATE flatten(SAMPLED_DATA);
}
STORE TOP_PROD_TITLE_LIST INTO '<SOME PATH>' USING PigStorage('|');
如何动态(按类别)设置给定组的 % 或整数值?我想过使用宏,但不能从嵌套的 FOREACH block 中调用宏。我可以编写一个将类别名称作为参数的 UDF,并输出 % OR INTEGER 值,并从 LIMIT 操作中调用此 UDF 吗?
SAMPLED_DATA = LIMIT SORTED_TOP_PROD categLimitVal(categ_name);
有什么建议么?我正在使用 Pig 的 0.10 版。

最佳答案

这样的事情可能会奏效。但是,我从来不需要在 Pig 映射中查找变量键,并且 this other SO question没有答案,因此您需要进行一些试验和错误才能使其正常工作:

--Load your dynamic percentages as a map
A = LOAD 'percentages' AS (categ_name:chararray, perc:float);
PERCENTAGES = FOREACH A GENERATE TOMAP(categ_name, perc);

PRODUCT_DATA = LOAD ...;
GRP_PROD_DATA = GROUP PRODUCT_DATA BY categ_name;

--Count the elements per group; needed to calculate pecentages
C = FOREACH GRP_PROD_DATA generate FLATTEN(group) AS categ_name, COUNT(*) as count;
c_MAP = FOREACH C GENERATE TOMAP(categ_name, count);

TOP_PROD_LIST = FOREACH GRP_PROD_DATA {
SORTED_TOP_PROD = ORDER PRODUCT_DATA BY impression_cnt DESC;
SAMPLED_DATA = LIMIT SORTED_TOP_PROD (C_MAP#group * PERCENTAGES#group);
GENERATE flatten(SAMPLED_DATA);
}

您也可以尝试使用 Pig's TOP 函数而不是 ORDER + LIMIT .

关于dynamic - 如何在 Pig 中动态获取组内的前 N% 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19169457/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com