Apache pig 如何计算拉丁语中的两列减法?

Apache pig 如何计算拉丁语中的两列减法?,apache-pig,calculated-columns,difference,Apache Pig,Calculated Columns,Difference,我有一张有15列的桌子 其中2列为日期格式,例如:09/08/2003。一列数据_1是开始日期,另一列数据_2是结束日期 我需要计算这两列之间的差异,并检查此差异是否超过30天 结果必须是一个包含列的表,该列显示的值与其他所有15列的值相差超过30天。 脚本可能与此类似: table = LOAD '$INPUT' AS (data_1, data_2, a1, a2, ... a13); ggdif = (data_2 - data_1); C = FILTER table BY (ggdif

我有一张有15列的桌子

其中2列为日期格式,例如:09/08/2003。一列数据_1是开始日期,另一列数据_2是结束日期

我需要计算这两列之间的差异,并检查此差异是否超过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中以正确的格式输入日期


  • 只需编写一个简单的UDF,将这两列作为输入

    可以是
    exec(元组输入)抛出IOException{

    输入(0)
    输入(1)
    转换为
    日期
    ,然后执行减法

    返回整数结果

    剩下的将只是
    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.
    }
    }
    

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

    谢谢。对不起,但对我来说这听起来有点复杂。你能在虚拟层面上解释一下吗?不,谢谢,对不起……这让你很好地理解了猪的UDF概念。如果你需要更多的帮助,请随时写一张便条。谢谢你!我会设法处理的。我猜是这样这不是最简单的方法,也许还有更简单的方法?
    grunt> REGISTER jarname.jar
    
    grunt> diffRow = foreach table generate FLATTEN(yourpackagename.DateDifference($0,$1)), and all your other columns...