PIG 中 UDF 中的 java.lang.NullPointerException

Posted

技术标签:

【中文标题】PIG 中 UDF 中的 java.lang.NullPointerException【英文标题】:java.lang.NullPointerException in UDF in PIG 【发布时间】:2016-01-10 17:56:40 【问题描述】:

我的 UDF 将给定的输入转换为大写

package myudfs;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;

public class UPPER extends EvalFunc<String>

public String exec(Tuple input) throws IOException

    if(input==null|| input.size()==0)
        return null;
    try
        String str=(String)input.get(0);
        return str.toUpperCase();
    catch(Exception e)
        throw new IOException("Caught exception processing input row",e);

    


我的输入文件是

100,,King,SKING,515.123.4567,17-JUN-87,AD_PRES,24000,,90
101,Neena,Kochhar,NKOCHHAR,515.123.4568,21-SEP-89,AD_VP,17000,100,90
102,Lex,De Haan,LDEHAAN,515.123.4569,13-JAN-93,AD_VP,17000,100,90

我执行了以下步骤- 1.) emp = LOAD' /home/warehouse/datasets/EMP.csv' 使用 PigStorage(',') AS (EMPLOYEE_ID:INT,FIRST_NAME:CHARARRAY,LAST_NAME:CHARARRAY,EMAIL:CHARARRAY,PHONE_NUMBER:CHARARRAY,HIRE_DATE:CHARARRAY ,JOB_ID:CHARARRAY,SALARY:INT,MANAGER_ID:CHARARRAY,DEPARTMENT_ID:CHARARRAY);

2.) B = FOREACH emp GENERATE EMPLOYEE_ID,myudfs.UPPER(FIRST_NAME) AS LINE;

当我做 DUMP B 时; 我收到“java.lang.NullPointerException”,我认为这是因为我的 FIRST-NAME 在其中一行中有 null。

我尝试删除空值,然后转储结果,但我仍然收到空指针异常。 C = FILTER B BY 行不为空; 转储 C;

请帮帮我。

【问题讨论】:

你可以使用pig.apache.org/docs/r0.14.0/func.html#upper 【参考方案1】:

或者最好使用这种 catch 块...这样,只有空指针异常被忽略...

catch(NullPointerException e)
        System.out.println("NullPointerException");
        return null;
        catch (Exception e)
        throw WrappedIOException.wrap("Caught exception processing input row ", e);
       

【讨论】:

【参考方案2】:

将您的Catch Block 更改为在出现异常时返回null,因此工作不会停止...有点如下所示...

catch (Exception e) 
    System.err.println("Error with ...");
    return null;

【讨论】:

以上是关于PIG 中 UDF 中的 java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

Pig 中的 SimpleTextLoader UDF

如何从 Pig 中的 Python UDF 打印?

Pig 中的 Python UDF

在 PIg 脚本中对 Avro 文件使用 UDF

Pig:一类中有多个UDF

Pig如何实例化UDF对象