`
qindongliang1922
  • 浏览: 2182980 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117500
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125880
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59875
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71279
社区版块
存档分类
最新评论

Apache Pig的UDF返回值问题

    博客分类:
  • Pig
阅读更多


今天写了关于Pig的EvalFunc UDF函数,结果一执行,发现返回值,总是bag类型,我就纳闷了,我明明指定了返回是String类型,怎么会变成Bag类型呢?经查找,发现拷贝的问题,由于先前写的UDF函数,返回值是多个,而现在的这个是一个,所以导致,我在pig脚本里面,进行强转string类型出错,发现问题后,设置返回类型为DataType.CHARARRAY问题得以解决。


案例(一),输入值为多个参数,返回也为多个参数


package com.easy.pig;

import com.easy.similar.model.ResultModel;
import com.easy.similar.tools.TextBuildID;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.*;
import org.apache.pig.impl.logicalLayer.schema.Schema;

import java.io.IOException;

/**
 * Created by qindongliang on 2015/9/29.
 * 根据一篇内容返回md5和关键词words
 */
public class FingerUDF  extends EvalFunc<DataBag>  {


    /**tuple实例**/
    TupleFactory mTupleFactory = TupleFactory.getInstance();
    /**Bag实例*/
    BagFactory mBagFactory = BagFactory.getInstance();

    /**md5构建**/
     TextBuildID textBuildID = new TextBuildID();





    @Override
    public DataBag exec(Tuple tuple) throws IOException {
        try {
            DataBag output = mBagFactory.newDefaultBag();
            Object o = tuple.get(0);
            //返回多少句子
            int num_sentence = Integer.parseInt(tuple.get(1).toString());
            //返回几个关键词
            int num_words = Integer.parseInt(tuple.get(2).toString());
            //使用指纹算法 1  还是分词算法 2
            int type=Integer.parseInt(tuple.get(3).toString());
            //参与扩展计算的指纹,null的直接返回空
            String ext=tuple.get(4)==null?"":tuple.get(4).toString();
            //设置句子数量
            textBuildID.top_N_Sentence=num_sentence;
            //设置返回指纹数量
            textBuildID.top_N_Words=num_words;
            //设置去重算法类型
            textBuildID.type=type;
            ResultModel ro=textBuildID.buildID(o.toString(),ext);
            output.add(mTupleFactory.newTuple(ro.getMd5()));//获取md5值
            output.add(mTupleFactory.newTuple(ro.getWords()));//获取指纹关键词
            return output;
        } catch (Exception ee) {
            // error handling goes here
            ee.printStackTrace();
        }


        return null;
    }


    /**描述scheaml形式*/
    public Schema outputSchema(Schema input) {
        try{
            Schema bagSchema = new Schema();
            bagSchema.add(new Schema.FieldSchema("token", DataType.CHARARRAY));

            return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input),
                    bagSchema, DataType.BAG));
        }catch (Exception e){
            return null;
        }
    }


}



案例(二),输入值为String,返回也为String

package com.easy.pig;

import org.apache.pig.EvalFunc;
import org.apache.pig.data.DataType;
import org.apache.pig.data.Tuple;
import org.apache.pig.impl.logicalLayer.schema.Schema;

import java.io.IOException;

/**
 *  处理url
 */
public class UrlCvUDF extends EvalFunc<String>  {


    @Override
    public String exec(Tuple tuple) throws IOException {
        try {

            Object o = tuple.get(0);
            if(o!=null){
                //判断是否为指定url开头的来源
                if((o+"").startsWith("http://www.court.gov.cn")){
                    return "1";
                }else{
                    return "2";
                }
            }
        } catch (Exception ee) {
            ee.printStackTrace();
        }
        //url 为null 则返回0
        return "0";
    }

//
    /**描述scheaml形式*/
    public Schema outputSchema(Schema input) {
        try{
            Schema bagSchema = new Schema();
            bagSchema.add(new Schema.FieldSchema("token", DataType.CHARARRAY));
            //注意此处返回值要与泛型里面的对应
            return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input),
                    bagSchema, DataType.CHARARRAY));
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }


}



案例一的pig脚本:

--SET debug 'on'

--REGISTER ./aa.jar
REGISTER ./udf-pig-similarty-hbase-1.0-SNAPSHOT-jar-with-dependencies.jar
REGISTER ./pig-udf-extend-1.0.1-SNAPSHOT-jar-with-dependencies.jar

--mkdir /user/webmaster/crawldb/finger/
--rmf /user/webmaster/crawldb/finger/

mkdir /user/webmaster/search/monitor/finger-data;
rmf  /user/webmaster/search/monitor/finger-data;



set job.name 'pig-hbase-build-index'


a = load 'hbase://ETLDB' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('content:conn content:casenum,meta:isdelete','-loadKey true  ');

--a = foreach a generate FLATTEN(com.easy.pig.FingerUDF((chararray)$1));
-- 4个参数  0:文章内容   1:前n最长的句子数,2:前n关键词,3:判重算法, 1=>指纹 2=>分词
a = foreach a generate $0 as rowkey:chararray , BagToString(com.easy.pig.FingerUDF((chararray)$1,5,8,1,$2),'@') as info:chararray,$2 as casenum:chararray , $3 as isdel:chararray ;
--a = foreach a generate $2 as num:chararray;

--a = limit a 50;

--dump a;
--describe a;
a = foreach a generate $0 as rowkey:chararray , STRSPLIT(info,'@',2).$0 as finger_md5:chararray ,STRSPLIT(info,'@',2).$1 as finger_content:chararray ,casenum,isdel ;

--describe a;

store a into  '/user/webmaster/search/monitor/finger-data'  using com.pig.support.lucene.LuceneStore('row:true:false,finger_md5:true:false,finger_content:true:false,casenum:true:false,isdel:true:false','default');



案例二的pig脚本:


--SET debug 'on'

--REGISTER ./aa.jar
REGISTER ./udf-pig-similarty-hbase-1.0-SNAPSHOT-jar-with-dependencies.jar
REGISTER ./pig-udf-extend-1.0.1-SNAPSHOT-jar-with-dependencies.jar

--mkdir /user/webmaster/crawldb/finger/
--rmf /user/webmaster/crawldb/finger/

mkdir /user/webmaster/search/monitor/finger-data;
rmf  /user/webmaster/search/monitor/finger-data;



set job.name 'pig-hbase-build-index'


a = load 'hbase://ETLDB' USING org.apache.pig.backend.hadoop.hbase.HBaseStorage('content:conn content:casenum meta:isdelete content:url','-loadKey true  ');

--a = foreach a generate FLATTEN(com.easy.pig.FingerUDF((chararray)$1));
-- 4个参数  0:文章内容   1:前n最长的句子数,2:前n关键词,3:判重算法, 1=>指纹 2=>分词
a = foreach a generate $0 as rowkey:chararray , BagToString(com.easy.pig.FingerUDF((chararray)$1,5,8,1,''),'@') as info:chararray,$2 as casenum:chararray , $3 as isdel:chararray,   com.easy.pig.UrlCvUDF((chararray)$4)  as source:chararray   ;
--a = foreach a generate $2 as num:chararray;


a = limit a 11;

dump a;
describe a;
--describe a;
--a = foreach a generate $0 as rowkey:chararray , STRSPLIT(info,'@',2).$0 as finger_md5:chararray ,STRSPLIT(info,'@',2).$1 as finger_content:chararray ,casenum,isdel ;

--describe a;

--store a into  '/user/webmaster/search/monitor/finger-data'  using com.pig.support.lucene.LuceneStore('row:true:false,finger_md5:true:false,finger_content:true:false,casenum:true:false,isdel:true:false','default');



1
0
分享到:
评论

相关推荐

    apache pig 基础及应用

    apache pig 基础及应用,urldecode row_number web日志分析 根据 用户行为 做出 简易的 相似度 判断。

    pig udf 函数(urldecode row_number tomap)

    在大数据处理领域,Apache Pig 是一个非常重要的工具,它提供了一种高级的脚本语言(Pig Latin)来处理大规模数据集。用户定义的函数(User Defined Functions, UDFs)是 Pig 功能的重要组成部分,允许用户扩展其...

    Apache Pig的性能优化.pdf

    根据给定的文件信息,我们可以深入探讨Apache Pig的性能优化及其在大数据处理中的角色与优势。首先,让我们从Apache Pig的基本概念入手。 ### Apache Pig概述 Apache Pig是一种高生产力的数据流语言和执行框架,...

    pig udf 示例

    pig udf 示例

    pig-json:用于 Apache Pig 的 Mortar JSON 工具

    FromJsonInferSchema :包装 JsonLoader 以将字符数组(字符串)字段中的 JSON 转换为 Map 的 Pig UDF。 推断输出的模式。 FromJsonWithSchema :与 FromJsonInferSchema 类似,但您提供架构。 这些工具适用于 ...

    pigiptools:这是一组Apache Pig Java UDF实用程序,可帮助我们提高生产效率。

    PigIp工具关于这是一组Apache Pig Java UDF实用程序,可使用, , , 和其他,帮助我们提高生产效率。执照 。快速开始这基本上是如何使用库的所有IP功能的示例 -- Register PigIpTools library ...

    drill-domain-tools:一组用于处理Internet域名的Apache Drill UDF

    一组用于处理Internet域名的Apache Drill UDF UDFs 有一个UDF: suffix_extract(domain-string) :给定一个有效的互联网域名(FQDN或其他方式),这将返回一个地图的领域tld , assigned , subdomain和hostname的...

    drill-twitter-text:一个Apache Drill UDF,用于通过twitter-text Java库(https

    一个Apache Drill UDF,用于通过 Java库处理Twitter tweet文本。 UDFs tw_parse_tweet(string) :解析tweet文本并返回具有以下命名值的地图列: weightedLength :(整数)tweet的总长度,其中代码点按配置文件中...

    pdi-pig-udfs:使用 Pentaho 数据集成的 Pig UDF 的集合

    2. **Java 类库**:开发 Pig UDF 时,会用到 Apache Pig 提供的 Java API,了解如何使用这些类库对于编写 UDF 很关键。 3. **JAR 文件**:编译后的 Java UDF 类需要被打包成 JAR 文件,以便在 Pig 脚本中引用。 **...

    apache-pig-on-storm:使用Apache Pig的Pig Latin生成并运行Apache Storm拓扑

    这包括编写自定义Pig UDF(用户定义函数)以及使用Java API来构建Storm拓扑。 在"apache-pig-on-storm-master"这个压缩包中,我们可以期待找到一个示例项目或库,它可能包含了以下内容: 1. **Pig Latin脚本**:...

    Apache Hadoop---Pig.docx

    Apache Hadoop 中的 Pig 是一个强大的分布式数据分析引擎,专门设计用于处理大规模数据集。Pig 构建在 Hadoop 平台上,通过提供一个名为 Pig Latin 的高级抽象语言,简化了在 Hadoop 上进行数据分析的过程。Pig ...

    pig-udf:猪用UDF样本

    3. 社区支持:Apache Pig有一个活跃的社区,用户可以在那里提问、分享经验并找到解决问题的方案。 总之,"pig-udf:猪用UDF样本"项目为学习和实践Pig中的Java UDF提供了一个很好的起点。通过深入理解UDF的工作原理...

    drill-html-tools:Apache Drill UDF用于检索和使用HTML文本

    Apache Drill UDF用于检索和使用HTML文本 基于库。 注意:这绝对是一个在制品。 UDFs soup_read_html(url-string, timeout-ms) :此UDF要求网络可到达预期的URL目标。 给定一个URL和一个连接超时(以毫秒为单位)...

    pig编程指南中的样例脚本、UDF、数据集

    《Pig编程指南》是一本深入讲解Apache Pig的权威书籍,它主要面向大数据处理和分析领域的开发者。在本书中,作者提供了丰富的样例脚本、用户定义函数(UDF)以及数据集,帮助读者理解并掌握Pig语言的精髓。Pig是...

    pdi-bridge:一个项目,允许您轻松地将 Pentaho Data Integration 集成到您的应用程序中。 适用于 Pig UDF、Spark 函数等

    PDI Bridge项目则提供了一个桥梁,使得PDI的功能能够更方便地被其他应用程序,如Apache Pig的用户定义函数(UDF)和Apache Spark的函数所调用。 Apache Pig是一个用于分析大型数据集的平台,它使用自己的语言Pig ...

    jpmml-pig:Apache Pig 平台的 PMML 评估器库(旧代码库)

    JPMML-猪 Apache Pig 平台 ( ) 的 PMML 评估器库。 特征 完全支持 PMML 规范版本 3.0 到 4.2。... 模型启动器类必须扩展抽象 Pig 用户定义函数 (UDF) 类org.apache.pig.EvalFunc并为以下方法提供具体实现: #exec(T

    UDF问题解析.pdf

    例如,在编写UDF时,需要#include "udf.h",并定义UDF的名字、参数和返回值等。 优化UDF 优化UDF需要考虑多个因素,例如,算法优化、编译优化、运行时优化等。通过优化UDF,可以提高计算效率和精度。 本资源摘要...

    UDF实用小程序_udf_质量源项_质量源udf_UDFfluent_udf源项_

    UDF(User Defined Functions)是ANSYS Fluent软件中的一个强大特性,允许用户自定义物理模型,以处理特定的流动问题。在本主题中,我们主要关注的是如何利用UDF来实现“质量源项”这一功能,这对于理解流体动力学中...

    Fluent-UDF常见问题解析

    搜集了FLUENT-UDF使用过程中常见的一些问题,对初学者有一定帮助

    ANSYS Fluent UDF Manual.rar_ANSYS FLUENT UDF_UDF manual_UDF-flu

    通过UDF,用户能够处理那些标准求解器无法解决的复杂问题,比如非牛顿流体、多相流、化学反应等。UDF手册详细介绍了如何创建、编译和链接UDF,以及如何在Fluent环境中调用它们。 手册的第一部分通常会介绍UDF的基本...

Global site tag (gtag.js) - Google Analytics