Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache pig 大输入的多个子集上的Pig唯一计数_Apache Pig - Fatal编程技术网

Apache pig 大输入的多个子集上的Pig唯一计数

Apache pig 大输入的多个子集上的Pig唯一计数,apache-pig,Apache Pig,我在HDFS上有大量的输入,我想使用Pig来计算几个独特的度量。为了帮助更容易地解释问题,我假设输入文件具有以下模式: userId:chararray,维度a_键:chararray,维度b_键:chararray,维度c_键:chararray,活动:chararray 每个记录表示由该用户ID执行的活动 根据“活动”字段中的值,此活动记录将映射到一个或多个类别。总共大约有10个类别 现在,我需要计算每个活动类别的不同维度组合的唯一用户数,即A、B、C、A+B、A+C、B+C、A+B+C 执

我在HDFS上有大量的输入,我想使用Pig来计算几个独特的度量。为了帮助更容易地解释问题,我假设输入文件具有以下模式:

userId:chararray,维度a_键:chararray,维度b_键:chararray,维度c_键:chararray,活动:chararray

每个记录表示由该用户ID执行的活动

根据“活动”字段中的值,此活动记录将映射到一个或多个类别。总共大约有10个类别

现在,我需要计算每个活动类别的不同维度组合的唯一用户数,即A、B、C、A+B、A+C、B+C、A+B+C

执行此类计算的最佳实践是什么

我试过几种方法。虽然我可以得到我想要的结果,但这需要很长的时间,即几天。我发现大部分时间都花在地图阶段。看起来脚本每次试图计算一个唯一计数时都试图加载巨大的输入文件。有没有办法改善这种行为

我也尝试了类似于下面的方法,但看起来它达到了单个减速机的内存上限,只是停留在减速机的最后一步

source = load ... as (userId:chararray, dimensionA_key:chararray, dimensionB_key:chararray, dimensionC_key:chararray, activity:chararray, ...);
a = group source by (dimensionA_key, dimensionB_key);
b = foreach a {
    userId1 = udf.newUserIdForCategory1(userId, activity);
    -- this udf returns the original user id if the activity should be mapped to Category1 and None otherwise
    userId2 = udf.newUserIdForCategory2(userId, activity);
    userId3 = udf.newUserIdForCategory3(userId, activity);
    ...
    userId10 = udf.newUserIdForCategory10(userId, activity);
    generate FLATTEN(group), COUNT(userId1), COUNT(userId2), COUNT(userId3), ..., COUNT(userId10);
}
store b ...;
谢谢。
T.E.

如果我了解您在寻找什么,可能是多维数据集操作允许通过多种组合进行分组-在Pig 0.11中提供


如果无法使用Pig 0.11,可以尝试按每个排列进行分组,并合并分组结果。

要帮助您解决内存问题,请查看