gpt4 book ai didi

hadoop - reducer 独立增量数

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

我正在尝试将SAS程序移植到Hive中,尽管我知道这不是理想的方法,但我的时间很短,而且恐怕现在必须忍受这个程序。

以下是我遇到的SAS代码:

if first.CustNo then do;
Call_No=0;
Call_No+1;
Cumm_Call_No+1;
Acct_Switch = 0;
end;

if first.AcctNo then do;
Acct_Switch +1;
Call_ID=0;
Call_ID+1;
if Acct_Switch >1 then do;
Call_Diff=INTCK('second',PrevEnd,NewEnd);
if Call_Diff >1800 then do;
Call_No+1;
Cumm_Call_No+1;
end;
end;
end;

Call_Diff=INTCK('second',PrevEnd,NewEnd);
if Call_Diff >1800 then Call_ID+1;
PrevEnd=0;
PrevEnd+NewEnd;
end;

上面的代码是宏的一部分,该宏循环遍历日志文件,并根据业务逻辑输出输出。

问题在于Call_No和Cumm_Call_No变量的分配。逻辑上说,一旦时间差超过30分钟,即使CustID和AcctNo保持不变,代码也会将这些变量各增加1,并将输出转储到新行中。

但是,我需要与此相关的帮助,因为Hive会将数据分散到Reducers中,每个Reducer都独立运行代码并为Call_No和Cumm_Call_No生成自己的值。由于日志的大小,具有相同CustID和/或AcctNo的行很可能会分布在Reducers中。

有人对这种情况有任何理论或更完善的解决方案吗?

问候

上尉

最佳答案

这取决于您的查询。如果您在CustID和AcctNo上使用group by子句,则对应于相同CustID和AcctNo的所有行将进入相同的reducer。那是保证的。

对于计数器,您可以使用UDAF来实现功能。

关于hadoop - reducer 独立增量数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24882789/

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