【问题标题】:pig check if column matches date formatpig 检查列是否与日期格式匹配
【发布时间】:2019-01-20 23:16:39
【问题描述】:

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

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

我正在尝试查找 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 (Name: POUserFunc(org.apache.pig.builtin.ToDate2ARGS)[datetime] - scope-172 Operator Key: scope-172) children: null at []]: java.lang.IllegalArgumentException : 无效格式:“开始”

我想知道是否可以在 FILTER 中,首先检查 begin 和 date 是否都是与指定日期格式匹配的有效日期,以便 ToDate() 中不会出现错误

【问题讨论】:

    标签: date hadoop apache-pig


    【解决方案1】:

    指定 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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 2021-03-19
      • 1970-01-01
      相关资源
      最近更新 更多