spark sql hive自定义函数(永久函数)

SparkSQL基础知识及与HIVE整合UDF函数编写 什么是SparkSQL 用于处理结构化数据的Spark模块 可以通过DataFrame和DataSet处理数据 SparkSQL特点 1易整合 可以使用java、scala、python、R等语言的API操作 2统一的数据访问 连接到任何数据源的方式相同。 3 兼容hive 4标准的数据连接(JDBC/ODBC) SQL 优缺点 优点:表达清晰 ,难度低,已学习 **缺点:**复杂的业业务需要复杂... 阅读详情


Spark(Hive) SQL中UDF的使用

相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内置的各类UDF也为我们的数据处理提供了不少便利的工具,当这些内置的UDF不能满足于我们的需要时,Hive SQL或Spark SQL还为我们提供了自定义UDF的相关接口,方便我们根据自己的需求进行扩展。
在Hive的世界里使用自定义UDF的过程是比较复杂的。我们需要根据需求使用Java语言开发相应的UDF(UDAF、UDTF),然后将UDF的代码及其依赖编译打包为Jar,使用方法有两种:
(1)临时函数
在一次会话(Session)中使用如下语句创建临时函数:

add jar /usr/local/fqlhadoop/spark/lib/hive_udf.jar
create temporary function row_sequence as 'org.rowsequence.RowSequence';
select id,row_sequence() from test.test limit 2;

这种方式有一个缺点:每一次会话过程中使用函数时都需要创建,而且仅在当前会话中有效。
(2)永久函数
这个特性需要高版本的Hive支持,它的好处是可以将UDF Jar存放至HDFS,函数仅需要创建一次即可以永久使用,如下:
(需要将hive_udf.jar(每台spark服务器)添加到spark_env.sh 中的spark_classpath)

CREATE FUNCTION row_sequence AS 'org.rowsequence.RowSequence' USING JAR 'hdfs://hacluster/system/hive_udf/hive_udf.jar';
select id,row_sequence() from test.test limit 2;

虽然永久函数相对于临时函数有一定优势,但Java语言的开发门槛很大程度上妨碍了UDF在实际数据分析过程中使用,毕竟我们的数据分析师多数是以Python、SQL为主要分析工具的,每一次UDF的开发都需要工程师的参与,开发效率与应用效果都是不是很好(可能需要频繁更新UDF的问题),PySpark的出现确很好地解决了这个问题:它可以非常方便地将一个普通的Python函数注册为一个UDF。

(3)永久函数 推荐

 1,添加函数文件$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UrlDecode.java

package org.apache.hadoop.hive.ql.udf;
import java.io.UnsupportedEncodingException; 
import java.net.URLDecoder; 
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF; 
import org.apache.hadoop.hive.ql.udf.UDFType; 
/** 
* UDUrlDecode. 
* @param <StringWritable> 
*/ 
@Description(name = "url_decode", value = "FUNC() - Returns Parsing the url string")
@UDFType(deterministic = false) 
public class UrlDecode extends UDF{ 
private String resultUrl; 
public UrlDecode() { 

} 
public String evaluate(String url) { 
if(url!=null&&url.length()>0){ 
try { 
resultUrl =URLDecoder.decode(URLDecoder.decode(url.toString(), "utf-8"), "utf-8");
} catch (UnsupportedEncodingException e) { 
e.printStackTrace(); 
} 
} 
return resultUrl; 
} 
}


将编译好的class文件放入spark-assembly-1.6.0-hadoop2.6.0.jar中(必须要放)


 2.将函数UrlDecode注册到hive的函数列表中 修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java文件 

 import org.apache.hadoop.hive.ql.udf.UrlDecode;

system.registerUDF("url_decode", UrlDecode.class, true);
将编译好的class文件替换spark-assembly-1.6.0-hadoop2.6.0.jar中(必须要放)


3.测试函数url_decode

hive> select id,url_decode('%25E9%2598%25BF%25E8%25BF%25AA%25E8%25BE%25BE%25E6%2596%25AF') from test.test; 



Spark-SQL连接Hive 的五种方法 因为 Spark Thrift Server 的接口和协议都和 HiveServer2 完全一致,因此我们部署好 Spark Thrift Server 后,可以直接使用 hive 的 beeline 访问 Spark Thrift Server 执行相关语句。3.运行bin/目录下的spark-sql.cmd 或者打开cmd,在 D:\spark\spark-3.0.0-bin-hadoop3.2\bin当中直接运行spark-sql。5.到spark的bin目录下打开spark-shell.cmd。 阅读详情

相关推荐

Hive on Spark and Spark sql on Hive

结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序。Hive和SparkSQL都不负责计算。Hive的默认执行引擎是mr,还可以运行在Spark和Tez。Spark可以连接多种数据源,然后使用SparkSQL来执行分布式计算。Hive On Spark 配置1、首先安装包要选择对,否则就没有开始了。Hive版本:apache-hive-...

代灿灿灿的博客 3227

spark sql 1.6.0 自定义永久函数

spark sql 1.5.0 也支持 Spark(Hive) SQL中UDF的使用 相对于使用MapReduce或者Spark Application的方式进行数据分析,使用Hive SQL或Spark SQL能为我们省去不少的代码工作量,而Hive SQL或Spark SQL本身内置的各类UDF也为我们的数据处理提供了不少便利的工具,当这些内置的UDF不能满足于我们的需要时

wuzhilon88的专栏 5006

Spark SQL【Java API】

Spark SQL 【Java API】

功不唐捐,玉汝于成 2418

spark-sql使用hive的自定函数配置

1、spark-sql可以直接使用hive的自定义函数,而不需要重新写一套spark-sql的自定义函数,这里较大家一个简单的配置方式即可 2、将hive的自定义函数jar拷贝到/usr/lib/spark-current/jars,我们的jar是先存在oss,所以用下面的命令, osscmd get --host=oss-cn-hangzhou-internal.aliyuncs.com --id=accessid --key=accesskey oss://bigdata-cps-test/h

大黄_sama 1562

Spark SQL读取Hive数据配置及使用Thrift JDBC/ODBC Server访问Spark SQL

[TOC] Spark SQL可以读取hive中的数据,开启Thrift JDBC/ODBC Server服务可以使其他语言客户端使用Spark SQL.关于Spark SQL中对hive的支持,官方文档说明让人疑惑,好像没有把hive编译进去,需要自己手动编译,官方文档提及: Spark SQL also supports reading and writing data stored in

Fang的博客 1万+

Spark SQL之 UDF自定义函数实战

目录 一:UDF含义 二:使用scala/java 创建的方法直接使用在Hive SQL 中 三:代码 一:UDF含义 UDF:(User Defined Function)用户自定义函数 二:使用scala/java 创建的方法直接使用在Hive SQL 中 作用:真正的把SQL的脚本操作方法与高级语言的方法贯通 三:代码 SCALA:实战 def main(ar...

威少(微笑) 1479

使用SparkSQL 和 Hive API 代码实现用户自定义函数UDF UDAF UDTF

UDAF 例:SparkSQL 中继承Aggregator自定义UDAF函数:输入多行,返回一行 => 聚合函数 。 (Scala代码实现) import org.apache.spark.SparkConf import org.apache.spark.sql.expressions.Aggregator import org.apache.spark.sql.{DataFrame, Encoder, Encoders, SparkSession, functions} //输入多行,返回

m0_38109926的博客 1485

Spark SQL、Hive SQL运行流程解析及对比

SQL Query↓Parser(解析SQL)↓Unresolved Logical Plan(未解析逻辑计划)↓Analyzer(解析表和列名)↓Resolved Logical Plan(已解析逻辑计划)↓Optimizer(Catalyst 优化器)↓Optimized Logical Plan(优化逻辑计划)↓Physical Planner(物理计划生成)↓Selected Physical Plan(选择的物理计划)↓。

认真学代码的shell 1205

Hive on Spark 配置

Hive引擎包括:MR(默认)、tez、spark。Hive on Spark:Hive既作为存储元数据又负责 SQL 的解析优化,语法是 HQL 语法,执行引擎变成了 Spark,Spark 负责采用 RDD 执行。Spark on Hive:Hive 只作为存储元数据,Spark负责SQL解析优化,语法是Spark SQL语法,Spark负责采用 RDD 执行。

hu_wei123的博客 2757

Spark-SQL之Hive交互|使用内嵌Hive|外部Hive应用|运行Spark SQL CLI|代码中操作Hive

Hive交互 Apache Hive 是 Hadoop 上的 SQL 引擎,Spark SQL编译时可以包含 Hive 支持,也可以不包含。 包含 Hive 支持的 Spark SQL 可以支持 Hive 表访问、UDF (用户自定义函数)以及 Hive 查询语言(HiveQL/HQL)等。需要强调的一点是,如果要在 Spark SQL 中包含Hive 的库,并不需要事先安装 Hive。一般来说...

SmallScorpion 982

SparkSQL下UDF的使用

在hive中UDF函数可以在使用add jar 的方法添加,然后createTemporary function aaa as 包名.类名创建临时函数,在spark-shell这样使用会报java.lang.ClassNotFoundException: com.luogankun.udf.HelloUDF。 这时将jar包放到(1)spark jars下 或(2)配置将jar包的路径配置到spa...

九师兄 2304

Spark、Hive UDF函数使用汇总

Spark UDF: 关于UDF:UDF:User Defined Function,用户自定义函数。 创建测试用DataFrame // 构造测试数据,有两个字段、名字和年龄 略。。。 // 注册一张user表 userDF.createOrReplaceTempView("user")   Spark Sql - UDF用法 下面的UDF的功能是计算某列的长度,该列的类型为S...

灬皇帝的新装灬的博客 3911

【Hive进阶】-- Hive SQL、Spark SQL和 Hive on Spark SQL

Hive由Facebook开发,用于解决海量结构化日志的数据统计,于2008年贡献给 Apache 基金会。Hive是基于Hadoop的数据仓库工具,可以将结构化数据映射为一张表,提供类似SQL语句查询功能本质:将Hive SQL转化成MapReduce程序。Spark SQL主要用于结构型数据处理,它的前身为Shark,在Spark 1.3.0版本后才成长为正式版,可以彻底摆脱之前Shark必须依赖HIVE的局面。

欢迎来到我的博客,一起探索代码里的世界! 3931

Hive SQL的数仓迁移成Spark SQL,之前的UDF函数怎么办?

前言 离线数仓之前的主力工具是hive,有一些处理需要写udf实现,当hive sql迁移成spark sql时。之前的udf函数该怎么办呢,本文为自测并总结。 结果写在前面,hive jar包可以直接复用,不用重新编写。 环境: spark2.11,hive2.3.6,hadoop2.7.2 解决方案 首先,hive的元数据一般生产我们都会存在mysql当时,所以设想:spark on hive也是使用hive的元数据,可以看到hive的表,那如果将hive的udf注册成hive的永久函数,spark o

俩只猴的博客 871

STM32单片机远程升级

stm32远程升级

fang_yang_wa的博客 1万+

《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》论文阅读笔记

文章名:《BiLSTM with Multi-Polarity Orthogonal Attention for Implicit Sentiment Analysis》 作者Jiyao Wei a,1, Jian Liaoa,1, Zhenfei Yanga, Suge Wanga,b,∗, Qiang Zhaoa 年份 2019 1 Introduction 目前文本情感分析多分析带...

weixin_39036944的博客 1631

Spark SQL 和 Hive on Spark的区别

维度Spark SQL性能✅ 更优(5-15%提升)良好(兼容优先)优化器Catalyst(激进优化)Hive + Spark(双重优化)生态集成✅ 原生 Spark 生态依赖 Hive 生态兼容性有限(Spark SQL 语法)✅ 完全 Hive 兼容适用场景新项目、高性能分析现有 Hive 迁移💡核心结论Spark SQL 性能通常优于 Hive on Spark,差异主要源于优化器的差异和架构设计。但在生产环境中,Hive on Spark 的兼容性价值往往更重要。

走过冬季 1265

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》标准解读

GB 44497-2024《智能网联汽车 自动驾驶数据记录系统》针对智能网联汽车的自动驾驶数据记录系统进行了全面规范。标准要求我们记录车辆在自动驾驶模式下的所有关键操作数据,如:1. 车辆状态数据,如速度、加速度、转向角度、制动状态等;2. 环境感知数据,如周围物体的位置、速度、类型等;3. 驾驶决策数据,如路径规划、避障决策、紧急制动指令等;4. 系统状态数据,如软件版本、硬件状态、系统警告信息等。在数据存储方面,标准强调了数据的安全性和可靠性。

daopuyun的博客 2673

Spark SQL操作Hive表

Spark SQL支持从Hive存储中读写数据。然而,Hive存在很多的依赖,而这些依赖又不包含在默认的各类Spark发型版本中。如果将Hive的依赖放入classpath中,Spark将自动加载它们。值得注意的是,这些依赖必须在所有节点中都存在。因为他们需要通过Hive的序列化和反序列化库(SerDes)来访问存储在Hive中的数据。 在Spark中配置Hive,需要将hive-site.xml, core-site.xml, hdfs-site.xml放置到Spark的conf/目录下。 需要操作H

RonieWhite的博客 3170

YOLO-FastestV2从零部署到移动端推理实战手册

本文详细介绍了YOLO-FastestV2从零开始的完整部署流程,涵盖环境搭建、模型训练、格式转换及移动端部署。通过实战步骤,指导开发者将这一轻量级目标检测模型成功部署到Android设备,实现实时推理。文章重点解析了PyTorch到NCNN的模型转换与优化,助力移动端AI应用开发。

l1k9j8h7g6的博客 670

信捷 XDH Ethercat 正负极限配置详解与实战技巧

本文详细解析了信捷XDH系列PLC通过EtherCAT总线配置伺服电机正负硬极限的完整流程与实战技巧。内容涵盖硬件开关选型安装、EtherCAT IO信号映射、软件参数设置(包括关键的极性配置)、调试验证方法,以及硬极限与软极限的协同策略。重点阐述了如何避免常见配置错误,确保运动控制系统的最后一道物理安全防线可靠有效,为工程师提供从理论到实践的全面指导。

wdx012345的博客 603

Spark SQL with Hive

Spark1.1发布后会支持Spark SQL CLI , Spark SQL的CLI会要求被连接到一个Hive Thrift Server上,来实现类似hive shell的功能。

OopsOutOfMemory盛利的博客 1万+

SAP 系统和银行系统通过 SM2 加密算法进行集成

SM2 是基于椭圆曲线离散对数问题(ECDLP)的一种公钥密码算法。椭圆曲线加密的核心原理,是利用了一个数学难题:在椭圆曲线群上,已知曲线上两点的运算结果,逆向推导出这两个点的具体信息是非常困难的。这样的复杂度使得基于椭圆曲线的密码体制比传统的 RSA 更加难以破解。在 SM2 加密中,公钥和私钥的生成与传统的椭圆曲线加密类似。选择一个椭圆曲线和一个基点 P。使用私钥 d,计算公钥 P’ = d * P。私钥 d 保密,而公钥 P’ 可公开分发,用于加密数据。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1212
下一篇: HBase调优
普通网友
博客等级 码龄10年 1粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值