0
我想将一个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分钟,代码会将这些变量增加1,并将输出转储到新行中,即使CustID和AcctNo保持不变。
但是,我需要帮助,因为Hive会将数据跨越Reducer,每个独立运行代码并为Call_No和Cumm_Call_No生成它们自己的值。由于日志的大小,相同CustID和/或AcctNo的行很可能会跨越Reducers分布。
有人有任何理论或更好的处理这种情况下的任何解决方案吗?
问候
Capt'n