猪 - 如何操纵和比较日期?

时间:2013-06-19 07:41:55

标签: hadoop apache-pig

我有一个包含以下条目的文件:

1,1,07 2012,07 2013,11,blablabla

两个第一个字段是ID。第三个是开始日期(月份),第四个是结束日期。第五个字段是这两个日期之间的月数。最后一个字段包含文字。

这是我的猪代码加载这些数据:

f = LOAD 'file.txt' USING PigStorage(',') AS (id1:int, id2:int, date1:chararray, date2:chararray, duration:int, text:chararray);

我想过滤我的文件,以便我只保留date2从今天开始不到三年的条目。猪可能会这样吗?

感谢。

3 个答案:

答案 0 :(得分:6)

无需编写自定义函数:

在Pig 0.11中,您可以使用ToDate()函数将date2字段从chararray转换为datetime数据类型,然后使用YearsBetween()获取CurrentTime()和date2之间的差异,并根据它进行过滤。例如:

g = FILTER f BY YearsBetween(CurrentTime(),ToDate(date2 + ' 01', 'yyyy MM dd'))<3

答案 1 :(得分:0)

在猪11中,是否支持比较日期时间类型? 例如: DATE1:日期时间

并且过滤器有条件: date1&gt; = ToDate('1999-01-01')

这种比较会返回正确的结果吗?

答案 2 :(得分:0)

如果你被困在年龄大于.11的猪身上,请使用datafu。 他们有一个函数UnixToIso

DEFINE UnixToISO   org.apache.pig.piggybank.evaluation.datetime.convert.UnixToISO();