如何使用 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,就可以看到预期的结果了

参考:

  1. http://www.w3.org/TR/NOTE-datetime
  2. https://pig.apache.org/docs/r0.11.1/func.html#datetime-functions

如果您可以将输入读取为字符串,并且它是预期的格式,那么您不需要进行任何转换,如果不能,则可以使用 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)