Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pig:UDF未返回预期结果集_Java_Hadoop_Mapreduce_Apache Pig_Bigdata - Fatal编程技术网

Java Pig:UDF未返回预期结果集

Java Pig:UDF未返回预期结果集,java,hadoop,mapreduce,apache-pig,bigdata,Java,Hadoop,Mapreduce,Apache Pig,Bigdata,这是我正在研究的样本数据: Peter Wilkerson 27 M James Owen 26 M Matt Wo 30 M Kenny Chen 28 M 我创建了一个简单的UDF,用于像这样过滤年龄: public class IsApplicable extends FilterFunc { @Override public Boolean exec(Tuple tuple) throws IOException {

这是我正在研究的样本数据:

Peter   Wilkerson   27  M
James   Owen    26  M
Matt    Wo  30  M
Kenny   Chen    28  M
我创建了一个简单的
UDF
,用于像这样过滤年龄:

public class IsApplicable extends FilterFunc {

    @Override
    public Boolean exec(Tuple tuple) throws IOException {
        if(tuple == null || tuple.size() > 0){
            return false;
        }
        try {
            Object object = tuple.get(0);
            if(object == null){
                return false;
            }
            int age = (Integer)object;
            return age > 28;
        } catch (Exception e) {
            throw new IOException(e);
        }
    }

}
这是我用于使用此UDF的脚本:

records = LOAD '~/Documents/data.txt' AS (firstname:chararray,lastname:chararray,age:int,gender:chararray);
filtered_records = FILTER records BY com.udf.IsApplicable(age);
dump filtered_records;
转储不显示任何记录。请让我知道我错过了哪里。

tuple.size()>0
条件是
if stmt
中的
始终为true
,因此它永远不会转到
try块(即过滤逻辑)
,这就是您得到空结果的原因。你能像这样改变if条件吗

     System.out.println("TupleSize="+tuple.size());
     if(tuple == null || tuple.size() < 0){
            return false;
        }

这将返回所有行的
false

if (tuple == null || tuple.size() > 0) {
    return false;
}
这是获取
用户名
,而不是
年龄

Object object = tuple.get(0);

有什么方法可以调试Pig UDF的java代码吗?对于调试,我将始终使用System.out.println()命令。它非常易于使用,并且输出将在控制台中打印。例如,如果要检查UDF代码中tuple.size()的值,只需将stmt添加到if条件System.out.println(“TupleSize=“+tuple.size()),运行pig脚本时,输出将显示在控制台中。注意:如果您在UDF代码中做了任何更改,请确保编译并生成jar文件,否则更改将不会反映出来。用系统命令更新了答案。
Object object = tuple.get(0);