如何用piglatin计算两列减法?

r1zhe5dt  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(435)

我有一张有15列的table。
此列中的2列具有日期格式,例如:09/08/2003。一列数据是开始日期,另一列数据是结束日期。
我需要计算这两列之间的差异,并检查这个差异是否超过30天。
结果必须是一个包含列的表,该列显示的值与其他15列的值相差超过30天。脚本可能与此类似:

table = LOAD '$INPUT' AS (data_1, data_2, a1, a2, ... a13);
ggdif = (data_2 - data_1);
C = FILTER table BY (ggdif > 30) AS differ;
D = FOREACH C GENERATE a1 .. a13;
STORE D INTO '$OUTPUT' USING PigStorage('\t');

我对这个任务有一些问题:
如何计算两列值之间的差值?
如何在pig中以正确的格式输入日期?

xvw2m8pv

xvw2m8pv1#

只需编写一个简单的udf,将这两列作为输入。
可以是 exec(Tuple input) throws IOException { 投出 input(0) 以及 input(1)Date 然后做减法。
返回整数结果。
剩下的就简单了 filter 首先,您可以简单地编写一个类

public class DateDifference extends EvalFunc<Integer>{

public int exec(Tuple input) throws IOException {
// Here you could take input.get(0).toString() and form a Date out of it.
// Same for input.get(1)
// you could either use Java Date or can use Joda Jars for date difference.
// return the date difference as integer.
}
}

准备一罐这个。
在Pig壳里

grunt> REGISTER jarname.jar

grunt> diffRow = foreach table generate FLATTEN(yourpackagename.DateDifference($0,$1)), and all your other columns...

休息很简单,我想你可以把剩下的填满。

相关问题