我有一个包含以下条目的文件:
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从今天开始不到三年的条目。猪可能会这样吗?
感谢。
答案 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)
并且过滤器有条件: date1&gt; = ToDate('1999-01-01')
这种比较会返回正确的结果吗?
答案 2 :(得分:0)
如果你被困在年龄大于.11的猪身上,请使用datafu。 他们有一个函数UnixToIso
DEFINE UnixToISO org.apache.pig.piggybank.evaluation.datetime.convert.UnixToISO();