我有一张15个圆柱的桌子。
此列中的2列具有日期格式,例如:09/08/2003。一列data_1是开始日期,另一列是data_2结束日期。
我需要计算这与列之间的差异,并检查这个差异是否超过30天。
结果必须是一个包含列的表,该列显示超过30天差异的值以及所有其他15列。 脚本可能与此类似:
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');
我在完成这项任务时遇到了一些问题:
如何计算2列值之间的差异?
如何在猪身上以正确的格式输入日期?
答案 0 :(得分:0)
只需编写一个简单的UDF,它将2列作为输入。
可以是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.
}
}
准备一罐这个。
在猪壳中
grunt> REGISTER jarname.jar
grunt> diffRow = foreach table generate FLATTEN(yourpackagename.DateDifference($0,$1)), and all your other columns...
休息很简单,我认为你可以填补其余部分。