我正在使用 Datafu 的 Hyperloglog UDF 来估计我的数据集中唯一 ID 的计数。在这种情况下,我有 3.2 亿个唯一 ID,它们可能会在我的数据集中多次出现。
Dataset : Country, ID.
这是我的代码:
REGISTER datafu-1.2.0.jar;
DEFINE HyperLogLogPlusPlus datafu.pig.stats.HyperLogLogPlusPlus();
-- id is a UUID, for example : de305d54-75b4-431b-adb2-eb6b9e546014
all_ids =
LOAD '$data'
USING PigStorage(';') AS (country:chararray, id:chararray);
estimate_unique_ids =
FOREACH (GROUP all_ids BY country)
GENERATE
'Total Ids' as label,
HyperLogLogPlusPlus(all_ids) as reach;
STORE estimate_unique_ids INTO '$output' USING PigStorage();
使用 120 个减速器,我注意到其中大部分在几分钟内完成。然而,少数减速器因数据过载而永远运行。我在 24 小时后杀死了他们。
我认为 Hyperloglog 比计数更有效。这里出了什么问题?