文章目录
使用方式
1.在hive中使用udf
1.1使用java代码编写udf
一句话总结:继承UDF类,重写evaluate()方法。
打成jar包之后,要么注册成hive的临时函数,要么注册为永久函数。
hive注册临时函数
hive>add jar /xxx/xxx/your_udf.jar;
hive>CREATE TEMPORARY FUNCTION func_name AS 'com.xxx.xxxx.MyUDF';
hive>list jars;//查看添加好的jar包;
hive>show functions like ’func_*‘; //查看函数
hive注册永久函数
hive>CREATE FUNCTION [db_name].func_name AS 'com.xxx.xxx.MyUDF' USING JAR 'hdfs://hadoop002:9000/xxx/xxx.jar'; //使用时要注意库的位置,非当前库操作需要加上库名方可使用
1.2使用scala代码编写udf
实验过,没创建成功,不能给hive用,也没人这么做,SB了,估计scala写的extend UDF1只能在scala编码使用
2.在spark中使用udf
2.1在spark中注册udf(推荐)
核心代码(spark2.x以上版本)
spark.udf.register("str_len", (str: String) => str.length())
spark.sql("select str_len(name) from xxx_table").show
详细讲解网上大把,不多赘述
3.在pyspark中使用udf
3.1python中注册udf(不推荐,性能差)
from pyspark.sql.functions import udf
from pyspark.sql.type import StringType
def strLen(str):
len(str)
udf(strLen, StringType())
spark.sql("select len(name) from user")
3.2使用pandas的udf(推荐,性能好)
from pyspark.sql.functions import pandas_udf
def plus_one(a):
return a + 1
//df_udf
plus_one_pd_udf = pandas_udf(plus_one, returnType=LongType())
//sql_udf这种方式可以写在sql中
spark.udf.register('plus_one',plus_one_pd_udf)
3.3引用scala或者java打成的jar包来注册udf(也推荐,有点小麻烦)
### 通过提交spark-submit的脚本加上 --jars [path/to/jar/x.jar]
# Pre Spark 2.1
spark._jvm.com.xxx.xxx.udf.MyUpper.registerUDF(spark._jsparkSession)
# Spark 2.1+
from pyspark.sql.types import LongType
sqlContext.registerJavaFunction("strLen", "com.xxx.xxx.udf.MyUDF", LongType())
# Spark 2.3+
from pyspark.sql.types import LongType
spark.udf.registerJavaFunction("strLen", "com.xxx.xxx.udf.MyUDF", LongType())
3.4采用在使用sql之前注册临时函数(中庸)
//利用--jars 上传java的udf的jar包
spark.sql(注册临时函数,参照1.1)

本文介绍了在hive, spark和pyspark中使用用户定义函数(UDF)的不同方法,包括在hive中使用java和scala编写UDF,在spark中注册UDF的推荐方式,在pyspark中使用python UDF、pandas UDF以及通过jar包注册UDF的优缺点。"
120808285,11537307,图的连通性:割点、桥、欧拉路径与强连通分量,"['图论算法', '数据结构', '图的遍历']
6865

被折叠的 条评论
为什么被折叠?



