我有一个输入作为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}时作业失败}}
答案 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)时。你必须手动过滤它。