避免在 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) 时。你必须手动过滤那个。
我有一个 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) 时。你必须手动过滤那个。