我有一个PIG脚本
调用java程序(JAR)将csv中的日期时间从06/02/2015 18:52转换为2015-6-2 18:52(mm / DD / yyyy转换为yyyy-MM-dd)< / p>
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
答案 0 :(得分:0)
文本文件中的时间戳必须使用格式yyyy-mm-dd HH:MM:SS [.F ...]。如果它们是另一种格式,则将它们声明为 适当的类型(INT,FLOAT,STRING等)并使用UDF进行转换 他们是时间戳。
所以你需要改变你的Converter
来输出这种格式,或者使用UDF ---或者只是把它们保存为字符串,这就是我通常做的事情!