如何使用 Pig 从字符串中获取有效的日期格式
How do I get a valid date format from a string using Pig
我有一个代表这样日期的源记录:
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 是从哪里来的?
输入的不是 ISO 日期和时间格式。
将输入的日期从20151104改为2015-11-04,就可以看到预期的结果了
参考:
如果您可以将输入读取为字符串,并且它是预期的格式,那么您不需要进行任何转换,如果不能,则可以使用 DateTime 函数来实现相同的目的。
Update :如果您将日期作为一种格式的字符串,并且您想将其转换为任何其他格式,那么如果您必须使用 ToDate() 和 ToString()方法。
N.B : Return 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)
我有一个代表这样日期的源记录:
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 是从哪里来的?
输入的不是 ISO 日期和时间格式。
将输入的日期从20151104改为2015-11-04,就可以看到预期的结果了
参考:
如果您可以将输入读取为字符串,并且它是预期的格式,那么您不需要进行任何转换,如果不能,则可以使用 DateTime 函数来实现相同的目的。
Update :如果您将日期作为一种格式的字符串,并且您想将其转换为任何其他格式,那么如果您必须使用 ToDate() 和 ToString()方法。
N.B : Return 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)