我有一个代表这样日期的源记录:
20151104
当我使用Pig加载源文件时,我定义了这样的记录:
data_raw = LOAD '/user/hue/myfile.csv' USING PigStorage(',') AS
(date:datetime)
然后使用以下代码将其推送到新格式:
data_values = FOREACH data_raw GENERATE ToString(date, 'yyyyMMdd') AS
date
当我将变量转出时,我得到:
(201511040101)
0101来自哪里?
答案 0 :(得分:0)
输入不是ISO日期和时间格式。
将输入日期更改为20151104至2015-11-04,您将能够看到预期结果。
参考:
如果您可以将输入读作String并且如果它是预期的格式,那么您不需要进行任何转换,如果没有使用DateTime函数来实现相同的。
更新:如果你有一种格式的Date as String,并且你想将它转换为任何其他格式,那么你必须使用ToDate()和ToString()方法。
N.B :ToDate的返回类型是DateTime对象,ToString的返回类型是String
http://pig.apache.org/docs/r0.12.0/func.html#to-date http://pig.apache.org/docs/r0.12.0/func.html#to-string
输入:
20151104
PigScript:
A = LOAD 'date_input' USING PigStorage(',') AS (my_date:chararray);
B = FOREACH A GENERATE ToDate(my_date, 'yyyyMMdd') AS my_date;
C = FOREACH B GENERATE ToString(my_date,'yyyy-MM-dd') AS my_date;
输出
DUMP B :
(2015-11-04T00:00:00.000-08:00)
DUMP C :
(2015-11-04)