猪检查列是否匹配日期格式

时间:2019-01-20 13:03:35

标签: date hadoop apache-pig

我正在使用Pig读取一个看起来像这样的巨大CSV文件(+29000行)

enter image description here

我感兴趣的是开始和结束,即日期

我正在尝试查找1930年活跃的商品。因此,我首先使用此语句加载了文件:

stations = LOAD '/mytp/isd-history.csv'
USING PigStorage(',')
AS
(
    id:int,
    wban:long,
    name:chararray,
    country:chararray,
    state:chararray,
    icao:chararray,
    lat:double,
    lon:double,
    ele:double,
    begin:chararray,
    end:chararray
); 

然后我使用此查询按日期过滤

items_active_1930 = FILTER stations
BY ToDate(begin,'yyyy-MM-dd') >= ToDate('1930-01-01')
AND ToDate(end,'yyyy-MM-dd') <= ToDate('1930-12-31');

当我尝试转储时,作业失败,并显示以下结果:

无法为别名items_active_1930打开迭代器。后端错误:执行[POUserFunc(名称:POUserFunc(org.apache.pig.builtin.ToDate2ARGS)[datetime]-scope-172操作员键:scope-172)时发生异常:子级:在[]]处为null:java.lang.IllegalArgumentException :格式无效:“开始”

我想知道是否可以在FILTER中进行检查,首先要检查开始日期和日期是否都是与指定日期格式匹配的有效日期,以便在ToDate()中不会发生错误

1 个答案:

答案 0 :(得分:0)

指定1930-01-01和1930-12-31的格式

items_active_1930 = FILTER stations
               BY (datetime)ToDate(begin,'yyyy-MM-dd') >= (datetime)ToDate('1930-01-01','yyyy-MM-dd')
               AND (datetime)ToDate(end,'yyyy-MM-dd') <= (datetime)ToDate('1930-12-31','yyyy-MM-dd');