在 pig 中创建 udf 以进行图像处理

Posted

技术标签:

【中文标题】在 pig 中创建 udf 以进行图像处理【英文标题】:To Create udf in pig for image processing 【发布时间】:2014-11-20 10:52:29 【问题描述】:

我想在 pig 中创建 UDF,使用 tika 来处理 HDFS 中的图像。

下面是我的代码,但我得到 ClassNotFound 异常

        public String exec(Tuple input) throws ExecException, IOException  
        try 
            if (input == null || input.size() == 0 || input.get(0) == null)
            
                return null;
            
         catch (ExecException ex) 
            Logger.getLogger(Check.class.getName()).log(Level.SEVERE, null, ex);
        
       String s="";
        ByteArrayInputStream b = (ByteArrayInputStream)input.get(0);
        ContentHandler contenthandler = new BodyContentHandler();
        Metadata metadata = new Metadata();
        Parser parser = new AutoDetectParser();
        ParseContext parseCtx = new ParseContext();
        try  
            parser.parse(b, contenthandler, metadata,parseCtx);
         catch (SAXException ex) 
            Logger.getLogger(Check.class.getName()).log(Level.SEVERE, null, ex);
         catch (TikaException ex) 
            Logger.getLogger(Check.class.getName()).log(Level.SEVERE, null, ex);
        


        System.out.println("Mime: " + metadata.get(Metadata.CONTENT_TYPE));
        return metadata.get(Metadata.CONTENT_TYPE);

    

输入是图像文件,以未知格式存储在hdfs中。

输出我需要输出作为文件的类型。 但我正在获取 TikaException 和 java Class not found 上述代码的异常。

错误

2014-11-21 12:00:56,417 [main] INFO  org.apache.pig.backend.hadoop.executionengi
ne.mapReduceLayer.MapReduceLauncher - Failed!
2014-11-21 12:00:56,483 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 10
66: Unable to open iterator for alias f. Backend error : java.lang.ClassNotFound
Exception: org.apache.tika.exception.TikaException

PigScript

a= load '/image.jpeg' as x;
b= group a all;
f= foreach b generate package.check(a)

如果有人知道上述问题的解决方案。请尽快指导我。

【问题讨论】:

请指定您传递的输入值和接收到的带有完整堆栈跟踪的输出.. 我已经编辑了内容,请在上面找到。 堆栈跟踪呢? 我已经为我的源代码添加了错误信息,请帮我解决这个问题, 请尝试从一个完全简单的 UDF 开始,看看是否可行。之后逐渐构建到您的实际 UDF 以找出问题所在。 -- 对于在寻找ERROR 1066: Unable to open iterator for alias 时发现此帖子的人,这里是generic solution。 【参考方案1】:

请检查 Apache Tika jar 是否已在您的 Pig 脚本中注册。确保它在执行 Pig 脚本期间可用。

例如:

REGISTER '/home/user/pig/udfrepository/projectUDF.jar'
REGISTER '/home/user/thridpartyjars/xyz.jar';

【讨论】:

嗨,我在执行 pig 脚本之前已经注册了 jar,但是收到了错误。

以上是关于在 pig 中创建 udf 以进行图像处理的主要内容,如果未能解决你的问题,请参考以下文章

fluent里的UDF进行后处理。

多个元组作为用 Java 编写的 pig UDF 中的输入

在 Pig 中只执行一次 UDF

PIG 中 Elephant-Bird UDF 中的 JSON 数组字段处理

在 bigquery 中创建一个 udf 以匹配数组输入

如何在 Spark 中创建 UDF 以支持自定义谓词