zoukankan      html  css  js  c++  java
  • SparkSQL使用之如何使用UDF

    使用java开发一个helloworld级别UDF,打包成udf.jar,存放在/home/hadoop/lib下,代码如下:

    package com.luogankun.udf;
    import org.apache.hadoop.hive.ql.exec.UDF;
    public class HelloUDF extends UDF {
        public String evaluate(String str) {
            try {
                return "HelloWorld " + str;
            } catch (Exception e) {
                return null;
            }
        }
    }

     Hive中使用UDF

    cd $HIVE_HOME/bin
    add jar /home/hadoop/lib/udf.jar CREATE TEMPORARY FUNCTION hello AS 'com.luogankun.udf.HelloUDF';
    select hello(url) from page_views limit 1;

     SparkSQL中使用UDF

    方式一:在启动spark-sql时通过--jars指定

    cd $SPARK_HOME/bin
    spark-sql --jars /home/hadoop/lib/udf.jar
    CREATE TEMPORARY FUNCTION hello AS 'com.luogankun.udf.HelloUDF';
    
    select hello(url) from page_views limit 1;

    方式二:先启动spark-sql后add jar

    cd $SPARK_HOME/bin
    spark-sql
    add jar /home/hadoop/lib/udf.jar;
    CREATE TEMPORARY FUNCTION hello AS 'com.luogankun.udf.HelloUDF';
    select hello(url) from page_views limit 1;

    在测试过程中发现并不支持该种方式,会报java.lang.ClassNotFoundException: com.luogankun.udf.HelloUDF

    如何解决? 

    1)需要先将udf.jar的路径配置到spark-env.sh的SPARK_CLASSPATH中,形如:

    export SPARK_CLASSPATH=$SPARK_CLASSPATH:/home/hadoop/software/mysql-connector-java-5.1.27-bin.jar:/home/hadoop/lib/udf.jar

    2)再启动spark-sql,直接CREATE TEMPORARY FUNCTION即可;

    cd $SPARK_HOME/bin
    spark-sql
    CREATE TEMPORARY FUNCTION hello AS 'com.luogankun.udf.HelloUDF';
    select hello(url) from page_views limit 1;

    方式三:Thrift JDBC Server中使用UDF

    在beeline命令行中执行:

    add jar /home/hadoop/lib/udf.jar;
    CREATE TEMPORARY FUNCTION hello AS 'com.luogankun.udf.HelloUDF';
    select hello(url) from page_views limit 1;
  • 相关阅读:
    C++(四十)— C++中一个class类对象占用多少内字节
    C++(三十九) — 主函数中增加调试信息
    C++(三十八) — 继承方式、访问控制、构造和析构、虚继承
    ambari部署Hadoop集群(1)
    小波分析和多尺度几何分析
    正则化与矩阵范数
    设计模式之:创建型设计模式
    设计模式六大原则(详细)
    UML类关系(依赖,关联,聚合,组合,泛化,实现)
    SSD详解
  • 原文地址:https://www.cnblogs.com/luogankun/p/3970153.html
Copyright © 2011-2022 走看看