格式无效:" 19690321"太短了

时间:2017-08-10 10:14:30

标签: hadoop apache-pig

我正在尝试使用pig将yyyyMMdd格式转换为yyyy / MM / dd格式,因为我已经编写了以下代码。

代码:

STOCK_A = LOAD '/user/root/xxxx/*' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($1 matches '.*ID.*'); 
MSH_DATA = FOREACH data GENERATE ToDate($8,'yyyy/MM/dd','UTC') AS dob;

当我试图转储结果时,我遇到错误。

  

错误org.apache.pig.tools.pigstats.SimplePigStats - 错误0:   执行[POUserFunc(名称:   POUserFunc(org.apache.pig.builtin.ToDate3ARGS)[datetime] - 范围-209   运算符键:scope-209)children:[]]处为null:   java.lang.IllegalArgumentException:格式无效:" 19690321"也是   短

示例:

EXVORV@#PDULD21F|ID|1|483|1020783||EXVORV@#PDULD||19690321|F|

8美元似乎对我有效我无法找到问题的原因。任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:1)

您使用:

ToDate($8,'yyyy/MM/dd','UTC')

但格式为

19690321

所以你应该

ToDate($8,'yyyyMMdd','UTC')

答案 1 :(得分:1)

问题很可能是因为load语句。由于您没有指定架构,默认情况下数据类型将为bytearray。在将字段传递给ToDate

之前,您必须将其转换为chararray
STOCK_A = LOAD '/user/root/xxxx/*' USING PigStorage('|'); 
data = FILTER STOCK_A BY ($1 matches '.*ID.*'); 
MSH_DATA = FOREACH data GENERATE ToDate((chararray)$8,'yyyy/MM/dd','UTC') AS dob;