【发布时间】:2015-06-25 13:17:40
【问题描述】:
我有一个 PIG 脚本
- 从 csv 加载和转换数据
- 替换一些字符
调用 java 程序 (JAR) 将 csv 中的日期时间从 06/02/2015 18:52 转换为 2015-6-2 18:52(mm/DD/yyyy 到 yyyy-MM-dd)
REGISTER /home/cloudera/DateTime.jar;
A = Load '/user/cloudera/Data.csv' using PigStorage(',') as (ac,datetime,amt,trace);
B = FOREACH A GENERATE ac, REPLACE(datetime, '\\/','-') as newdate,REPLACE(amt,'-','') as newamt,trace;
C = FOREACH B GENERATE ac,Converter.DateTime(newdate) as ConvDate,ConvAmt,trace;
Store C into '/user/cloudera/Output/' using PigStorage('\t');
样本输入 -- 21467245 06/02/2015 18:52 -9.59 518
样本输出 -- 21467245 2015-6-2 18:52 9.59 518
我正在将输出加载到配置单元中,其他字段在导入过程中似乎很好,但是如果作为时间戳加载,日期时间字段结果为 null,并且在其字符串时是完整的。
这是哪里出了问题?
我正在使用 Cloudera CDH 5
【问题讨论】:
-
pig内置了
ToDate()函数。 -
@GoBrewers14 - 它是否将输出格式从 pig 更改为与 Hive 兼容以作为时间戳摄取?
-
@GoBrewers14 ToDate(newdate, 'MM-dd-yyyy HH:mm') 给出 2015-06-02T18:52:00.000Z Hive 仍然不采用这种格式,因为它需要 yyyy-MM -dd 作为时间戳。
-
如果您需要
yyyy-MM-dd,那么为什么要将yyyy-MM-dd HH:mm放入ToDate()函数中?只需输入yyyy-MM-dd -
@GoBrewers14 ToDate(newdate, 'yyyy-MM-dd HH:mm') 给出错误,我在发表评论之前尝试过。后端错误:org.apache.pig.backend.executionengine.ExecException:错误0:执行时出现异常[POUserFunc(名称:POUserFunc(org.apache.pig.builtin.ToDate2ARGS)[datetime] - scope-38 Operator Key:scope- 38) children: null at []]: java.lang.IllegalArgumentException: Invalid format: "06-02-2015 18:52" is malformed at "15 18:52" 据我所知,Hive 可以采用 yyyy-MM- dd HH:mm 格式,如果包括时间,这是我试图实现的目标
标签: date hadoop hive apache-pig cloudera