避免在 Pig 的 ToDate 中出现个别行的异常

Avoid exception in ToDate in Pig for individual rows

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

我的数据示例格式是:

A,21,12/1/2010 8:26
B,33,12/1/2010 8:26
C,42,i am corrupted
D,30,12/1/2013 9:26

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

假设 csv 文件加载到 Y(name,id,date)

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

我想在上述语句之前将 FILTER 应用到 Y 以过滤掉以 C 开头的行。因为,按原样,当我 DUMP X;.

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) 时。你必须手动过滤那个。