我正在尝试使用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美元似乎对我有效我无法找到问题的原因。任何帮助都会非常感激。
答案 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;