gpt4 book ai didi

hadoop - 为 hadoop/PIG 输出数据分配 ID

转载 作者:可可西里 更新时间:2023-11-01 16:18:28 24 4
gpt4 key购买 nike

我正在研究 PIG 脚本,它对原始交易执行繁重的数据处理,并提出各种交易模式。

假设其中一种模式是 - 查找一天内收到跨境交易的所有账户(包括交易总额和交易金额)。

我预期的输出应该是两个数据文件1) 汇总数据——比如账户 A1 从国家 AU 收到了 50 笔交易。2) 原始交易——A1 的所有超过 50 笔交易。

我的 PIG 脚本当前正在创建以下格式的输出数据源

账户国家 TotalTxns RawTransactions

A1 AU 50 [(Txn1), (Txn2), (Txn3)....(Txn50)]

A2 JP 30 [(Txn1), (Txn2)....(Txn30)]

现在这里的问题是,当我从 Hadoop 系统(到某个数据库)中获取这些数据时,我想在我的汇总记录(A1、AU、50)与所有 50 个原始事务(如汇总记录的 ID 1)之间建立链接用作所有 50 个关联 Txns 的外键)。

我了解分发的 Hadoop 不应该用于分配 ID,但是是否有任何选项可以分配非唯一 ID(无需顺序)或以其他方式链接此数据?

编辑(使用 DataFu 的枚举后)这是 PIG 脚本

register /UDF/datafu-0.0.8.jar
define Enumerate datafu.pig.bags.Enumerate('1');
data_txn = LOAD './txndata' USING PigStorage(',') AS (txnid:int, sndr_acct:int,sndr_cntry:chararray, rcvr_acct:int, rcvr_cntry:chararray);
data_txn1 = GROUP data_txn ALL;
data_txn2 = FOREACH data_txn1 GENERATE flatten(Enumerate(data_txn));
dump data_txn2;

运行后,我得到了

错误 org.apache.pig.tools.pigstats.SimplePigStats - 错误 2997:无法从支持的错误中重新创建异常:java.lang.NullPointerException 在 datafu.pig.bags.Enumerate.enumerateBag(Enumerate.java:89) 在 datafu.pig.bags.Enumerate.accumulate(Enumerate.java:104)....

最佳答案

我经常在 Hadoop 作业中分配随机 ID。您只需要确保生成的 ID 包含足够数量的随机位,以确保冲突的概率足够小 (http://en.wikipedia.org/wiki/Birthday_problem)。

根据经验,我使用 3*log(n) 个随机位,其中 n = # of ids that needed to be generated。

在许多情况下,Java 的 UUID.randomUUID() 就足够了。

http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates

关于hadoop - 为 hadoop/PIG 输出数据分配 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511271/

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