概述
udf:user define function:用户自定义函数
hive中udf的开发和运用非常普遍
hive中的udf都放在-i的初始化文件里面。所以hive的udf弄好了和hive的内置函数是一样的,但是spark中就不行,因为它是在代码里面嵌入进去,所以不通用。
sparksql里udf开发用的不多,原因有2:
1,无法固化,只能在每个程序内使用,所以无法其他作业复用。如果每个应用里都包含相同功能的udf,如果udf需求有变则维护起来非常麻烦,而hive的udf不存在这个问题
2,大多数功能上都可以用map()替代
cat /opt/cloudy/bin/hive-init.sql可以看到
add jar /opt/cloudy/lib/hiveUDF.jar
create temporary function GetCommonNameOrID as 'com.cloudy.hive.udf.GetCommonNameOrID';
create temporary function GetSaleName as 'ocm.cloudy.hive.udf.GetSaleName';
这是通用的
而spark的udf只能在自己的程序中通过sparksession.udf.register来创建,所以说它复用性不强,不通用
实际开发中都是用map来代替。
以下是sparkudf开发:
import java.util.regex.{Matcher, Pattern} import org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession import org.apache.spark.storage.StorageLevel /** * Created by zengxiaosen on 16/9/23. */ object UseUDF { def main(args: Array[String]): Unit = { val sparkConf = new SparkConf().setAppName("useUDF").setMaster("local") val ss = SparkSession.builder().config(sparkConf).getOrCreate() val sc = ss.sparkContext val fileRDD = sc.textFile("/opt/tarballs/spark_kafka/beifengspark/src/main/scala/2015082818") .filter(line=>line.length>0) .map{ line => val arr = line.split("t") val date = arr(17).substring(0,10) val guid = arr(5) val url = arr(1) (date,guid,url) }.filter(i=>i._3.length>0).persist(StorageLevel.DISK_ONLY) //开发一个udf /* udf在hive中用得多,在spark中用的不多,原因就是其他地方也想用这个udf 的话没办法传给它,没办法共享,而在hive中很方便,有初始化文件 hive的udf都放在-i的初始化文件里 */ ss.udf.register("getName",(url: String,regex:String) =>{ val p: Pattern = Pattern.compile(regex) val m: Matcher = p.matcher(url) if (m.find) { m.group(0).split("/")(1).toLowerCase() }else null }) import ss.implicits._ import ss.sql //每个活动页带来的流量 fileRDD.toDF("date","guid","url").createOrReplaceTempView("log03") val sql03 = s""" |select getName(url,'sale/[a-zA-Z0-9]+'),count(distinct guid), |count(url) from log03 where url like '%sale%' group by |date,getName(url,'sale/[a-zA-Z0-9]+') """.stripMargin sql(sql03).rdd.foreach(println) sc.stop() ss.stop() } }
最后
以上就是心灵美星月为你收集整理的hiveudf和sparkudf开发应用和对比的全部内容,希望文章能够帮你解决hiveudf和sparkudf开发应用和对比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复