对于各行,避免在Pig中的ToDate中出现异常

时间:2016-07-01 14:26:02

标签: csv datetime apache-pig

我有一个输入作为CSV文件,我试图用Pig处理。在csv中,有一个日期列,其中包含某些行的损坏值。在我将ToDate()函数应用于FOREACH...GENERATE语句中的日期列之前,请建议我过滤掉那些已损坏的行(具有损坏的日期列)的机制。

我的数据的示例格式是:

  

A,21,12 / 1/2010 8:26
  B,33,12 / 1/2010 8:26
  C,42,我被腐败了   D,30,12 / 1/2013 9:26

我希望能够加载它,然后将其转换为:

假设csv文件被加载到Y(名称,id,日期)

X = FOREACH Y GENERATE ToDate(date, 'mm/dd/yyyy HH:mm') AS newdate;

我想在上面的语句之前将FILTER应用于Y以过滤掉以C开头的行。因为,上面的语句会抛出异常,并且当{{1}时作业失败}}

1 个答案:

答案 0 :(得分:2)

ToDate失败的两种情况,

1)当日期缺失或语法错误时,  使用正则表达式

过滤所有日期
X = FILTER Y BY (date matches '/(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/');

2)当日期属于您所在时区的夏令时(https://en.wikipedia.org/wiki/Daylight_saving_time)时。你必须手动过滤它。