Java 错误1066:无法在某些字段中打开alias的迭代器,但可用于其他字段

Java 错误1066:无法在某些字段中打开alias的迭代器,但可用于其他字段,java,alias,user-defined-functions,apache-pig,Java,Alias,User Defined Functions,Apache Pig,我无法在某些字段上使用我的自定义项,但我可以在其他字段上使用它。如果我使用我的第一个字段,ipAddress,udf将按预期工作。但是,如果我将其更改为date,则会出现1066错误。这是我的剧本 Pig脚本,可以工作并调用udf。 Pig脚本不起作用,并调用udf Pig脚本,该脚本可以工作,但不调用udf 样本数据 Java自定义项 如果还有什么事,请告诉我。我在本地运行这个错误,并在map reduce上运行 日期可能在某些时候为空吗?在您的UDF中,对元组有空检查,但对输入没有检查。ge

我无法在某些字段上使用我的自定义项,但我可以在其他字段上使用它。如果我使用我的第一个字段,
ipAddress
,udf将按预期工作。但是,如果我将其更改为
date
,则会出现1066错误。这是我的剧本

Pig脚本,可以工作并调用udf。 Pig脚本不起作用,并调用udf Pig脚本,该脚本可以工作,但不调用udf 样本数据 Java自定义项
如果还有什么事,请告诉我。我在本地运行这个错误,并在map reduce上运行

日期可能在某些时候为空吗?在您的UDF中,对元组有空检查,但对
输入没有检查。get(0)


如果发生这种情况,它将击中您的捕获块,您的UDF将出错。可能是导致此错误的原因…

除了
错误1066
之外,还有其他输出吗?有关于后端异常的信息吗?在启动任何map reduce作业之前,您的脚本是否开始执行,或者是否因此错误而失败?对于在查找此处时找到此帖子的人来说,这是一个错误。也许我错了,但如果(input==null | | input.size()=0)返回“”,这不就是此
的后半部分吗if语句在做什么?否,这是确保有输入,并且它有一个项。Seedhead的意思是,如果输入有一个项,但它是null,也就是input.get(0)==null,那么您的函数将出错。
REGISTER myudfs.jar;
DEFINE HOUR myudfs.HOUR;

A = load 'access_log_Jul95' using PigStorage(' ') as (ip:chararray, dash1:chararray, dash2:chararray, date:chararray, date1:chararray, getRequset:chararray, location:chararray, http:chararray, code:int, port:int);
B = FOREACH A GENERATE HOUR(ip);
dump B;
REGISTER myudfs.jar;
DEFINE HOUR myudfs.HOUR;

A = load 'access_log_Jul95' using PigStorage(' ') as (ip:chararray, dash1:chararray, dash2:chararray, date:chararray, date1:chararray, getRequset:chararray, location:chararray, http:chararray, code:int, port:int);
B = FOREACH A GENERATE HOUR(date);
dump B;
REGISTER myudfs.jar;
DEFINE HOUR myudfs.HOUR;

A = load 'access_log_Jul95' using PigStorage(' ') as (ip:chararray, dash1:chararray, dash2:chararray, date:chararray, date1:chararray, getRequset:chararray, location:chararray, http:chararray, code:int, port:int);
B = FOREACH A GENERATE date;
dump B;
199.72.81.55 - - [01/Jul/1995:00:00:01 -0400] "GET /history/apollo/ HTTP/1.0" 200 6245
 package myudfs;
 import java.io.IOException;
 import org.apache.pig.EvalFunc;
 import org.apache.pig.data.Tuple;
 import org.apache.pig.impl.util.WrappedIOException;

 public class HOUR extends EvalFunc<String>
 {
        @SuppressWarnings("deprecation")
        public String exec(Tuple input) throws IOException {
            if (input == null || input.size() == 0)
                return " ";
         try{
             String str = (String)input.get(0);
                return str.substring(0, 1);
            }catch(Exception e){
                throw WrappedIOException.wrap("Caught exception processing input row ", e);
            }
        }
 }
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1066: Unable to open iterator for alias B