独立于reducer的增量数

kq0g1dla  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(427)

我正在尝试将一个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\u no和cumm\u call\u no变量的赋值。逻辑上说,一旦时间差超过30分钟,代码就会将这些变量各增加1,并将输出转储到新行中,即使custid和acctno保持不变。
但是,我需要这方面的帮助,因为hive会将数据扔到每个独立运行代码的还原器上,并为call\u no和cumm\u call\u no生成它们自己的值。由于日志的大小,很可能相同custid和/或acctno的行会分布在还原器上。
有没有人有任何理论或更好的方法来处理这种情况?
当做
船长

67up9zun

67up9zun1#

这取决于你的问题。如果对custid和acctno使用groupby子句,那么与同一custid和acctno对应的所有行都将转到同一个reducer。这是可以保证的。
对于计数器,可以使用udaf来实现该功能。

相关问题