带有 ToDate 内置函数的 PIg- NullPointerException

Posted

技术标签:

【中文标题】带有 ToDate 内置函数的 PIg- NullPointerException【英文标题】:PIg- NullPointerException with ToDate built-in function 【发布时间】:2014-03-20 09:05:06 【问题描述】:

我对 Pig 的内置函数 ToDate 有疑问。

我有一个名为 result2 的变量,格式如下:

search_file::DATE_HADO: chararray,search_file::IP: chararray,A::COD_IP: chararray,A::DAT_START: chararray,A::NDI_START: chararray

argl = foreach result2 GENERATE ToDate(DATE_HADO,'yyyy/mm/dd HH:mm:ss'), IP, COD_IP, ToDate(DAT_START,'yyyy/mm/dd HH:mm:ss'), NDI_START;

dump argl;

字段 DATE_HADO 和 DAT_START 如下所示:

(2014/03/10 00:00:00)
(2014/03/10 00:00:01)
(2014/03/10 00:00:00)

当我执行代码时,会引发此异常:

java.lang.NullPointerException
at org.joda.time.format.DateTimeFormatterBuilder$NumberFormatter.parseInto(DateTimeFormatterBuilder.java:1200)
at org.joda.time.format.DateTimeFormatterBuilder$Composite.parseInto(DateTimeFormatterBuilder.java:2525)
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:669)
at org.apache.pig.builtin.ToDate2ARGS.exec(ToDate2ARGS.java:42)
at org.apache.pig.builtin.ToDate2ARGS.exec(ToDate2ARGS.java:33)
at org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.getNext(POUserFunc.java:337)
at org.apache.pig.backend.hadoop.executionengine.physicalLayer.expressionOperators.POUserFunc.getNext(POUserFunc.java:422)
at org.apache.pig.backend.hadoop.executionengine.physicalLayer.PhysicalOperator.getNext(PhysicalOperator.java:350)
at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.processPlan(POForEach.java:372)
at org.apache.pig.backend.hadoop.executionengine.physicalLayer.relationalOperators.POForEach.getNext(POForEach.java:297)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.runPipeline(PigGenericMapReduce.java:465)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.processOnePackageOutput(PigGenericMapReduce.java:433)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.reduce(PigGenericMapReduce.java:413)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigGenericMapReduce$Reduce.reduce(PigGenericMapReduce.java:257)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:164)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:610)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:449)

我不明白,我的代码似乎很好,但它不起作用。

你知道为什么吗?

谢谢

【问题讨论】:

【参考方案1】:

您的某些日期字段可能为空。首先检查它们是否为空,否则你会得到一个 NullpointerException。此外,日期模式应为 yyyy/MM/dd HH:mm:ss,月份有两个大写 m。

【讨论】:

以上是关于带有 ToDate 内置函数的 PIg- NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

避免个别行在 Pig 中的 ToDate 中出现异常

是否可以在 pig java udf 中使用 pig 内置函数

猪在 3 月份给出错误结果的天数

它是啥样的 SQL? TODATE()、TOCHAR()、isdate 格式()

Pig 脚本到日期转换问题导致不同的输出

Apache Pig:用字符串替换 null