gpt4 book ai didi

java - ERROR 1066 : Unable to open iterator for alias in certain fields, 但适用于其他人

转载 作者:搜寻专家 更新时间:2023-11-01 03:07:53 26 4
gpt4 key购买 nike

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

运行并调用 udf 的 Pig 脚本。

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;

无法运行并调用 udf 的 Pig 脚本

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;

有效但不调用 udf 的 Pig 脚本

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

Java 用户定义函数

 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

如果还有什么,请告诉我。我在本地运行时遇到此错误,并在 map reduce 上运行。

最佳答案

date 有时可以为 null 吗?在您的 UDF 中,对元组进行空检查,但不检查 input.get(0)

如果发生这种情况,它将命中您的 catch block 并且您的 UDF 将出错。可能导致此错误...

关于java - ERROR 1066 : Unable to open iterator for alias in certain fields, 但适用于其他人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16365207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com