如何在Pig Latin中计算两列减法?

时间:2013-12-05 14:59:26

标签: apache-pig calculated-columns difference

我有一张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');

我在完成这项任务时遇到了一些问题:

  1. 如何计算2列值之间的差异?

  2. 如何在猪身上以正确的格式输入日期?

1 个答案:

答案 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...

休息很简单,我认为你可以填补其余部分。