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

标签 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,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;

我想在上面的语句之前对 Y 应用一个 FILTER 来过滤掉以 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) 当日期属于您所在时区的 DST ( https://en.wikipedia.org/wiki/Daylight_saving_time ) 时。您必须手动过滤它。

关于csv - 避免 Pig 中的 ToDate 中个别行出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147906/

相关文章:

linux - 如何根据多个条件将大文件 ".csv"分成小文件?

java - JDK 中用于将时区格式化为特定字符串的任何实用程序

hadoop - AVG 分组数据抛出错误 1046 :Use an Explicit Cast

python - 如何在从elasticsearch导出的CSV文件中打印列名?

arrays - PowerShell-无法导出到CSV文件

python - 使用Python需要将数据从多列转换为单列并重复A列

用于获取日期范围的 perl 子例程

python - YYMM 到日期时间 python

sum - 带有 int 的 Pig Latin 中的 sum 函数出现错误 1045

xml - Hadoop 和结构化数据