1

我有一个文件,其中包含这样的条目:

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 从今天起不到三年的条目。在 Pig 有可能吗?

谢谢。

4

3 回答 3

6

无需编写自定义函数:

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

g = FILTER f BY YearsBetween(CurrentTime(),ToDate(date2 + ' 01', 'yyyy MM dd'))<3
于 2013-06-19T19:27:03.097 回答
0

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

并且过滤器具有条件: date1 >= ToDate('1999-01-01')

这种比较是否返回正确的结果?

于 2013-07-19T18:42:39.520 回答
0

如果您卡在 0.11 之前的 Pig 上,请使用 datafu。他们有一个函数 UnixToIso

DEFINE UnixToISO   org.apache.pig.piggybank.evaluation.datetime.convert.UnixToISO();
于 2013-12-11T23:59:25.197 回答