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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM