Spark SQL----Hive表

Spark SQL----Hive表

  • 一、指定Hive表的存储格式
  • 二、与不同版本的Hive Metastore交互

Spark SQL还支持读取和写入存储在Apache Hive中的数据。然而,由于Hive有大量的依赖项,这些依赖项不包括在默认的Spark发布版中。如果在类路径上可以找到Hive依赖项,Spark将自动加载它们。请注意,这些Hive依赖项也必须存在于所有工作节点上,因为它们需要访问Hive序列化和反序列化库(SerDes)才能访问存储在Hive中的数据。
Hive的配置是通过将hive-site.xml, core-site.xml(用于安全配置)和hdfs-site.xml(用于HDFS配置)文件放在conf/中来完成的。
使用Hive时,必须实例化具有Hive支持的SparkSession,包括到持久Hive metastore的连接、对Hive serdes的支持以及Hive用户定义的函数(UDF)。没有现成Hive部署的用户仍然可以启用Hive支持。当hive-site.xml未配置时,上下文会自动在当前目录中创建metastore_db,并创建由spark.sql.warehouse.dir配置的目录,默认为spark应用程序启动的当前目录中的目录spark-warehouse。请注意,自Spark 2.0.0以来,hive-site.xml中的hive.metastore.warehouse.dir属性已被弃用。相反,使用spark.sql.warehouse.dir来指定数据库在仓库中的默认位置。你可能需要将写入权限授予启动Spark应用程序的用户。

from os.path import abspathfrom pyspark.sql import SparkSession
from pyspark.sql import Row# warehouse_location points to the default location for managed databases and tables
warehouse_location = abspath('spark-warehouse')spark = SparkSession \.builder \.appName("Python Spark SQL Hive integration example") \.config("spark.sql.warehouse.dir", warehouse_location) \.enableHiveSupport() \.getOrCreate()# spark is an existing SparkSession
spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive")
spark.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")# Queries are expressed in HiveQL
spark.sql("SELECT * FROM src").show()
# +---+-------+
# |key|  value|
# +---+-------+
# |238|val_238|
# | 86| val_86|
# |311|val_311|
# ...# Aggregation queries are also supported.
spark.sql("SELECT COUNT(*) FROM src").show()
# +--------+
# |count(1)|
# +--------+
# |    500 |
# +--------+# The results of SQL queries are themselves DataFrames and support all normal functions.
sqlDF = spark.sql("SELECT key, value FROM src WHERE key < 10 ORDER BY key")# The items in DataFrames are of type Row, which allows you to access each column by ordinal.
stringsDS = sqlDF.rdd.map(lambda row: "Key: %d, Value: %s" % (row.key, row.value))
for record in stringsDS.collect():print(record)
# Key: 0, Value: val_0
# Key: 0, Value: val_0
# Key: 0, Value: val_0
# ...# You can also use DataFrames to create temporary views within a SparkSession.
Record = Row("key", "value")
recordsDF = spark.createDataFrame([Record(i, "val_" + str(i)) for i in range(1, 101)])
recordsDF.createOrReplaceTempView("records")# Queries can then join DataFrame data with data stored in Hive.
spark.sql("SELECT * FROM records r JOIN src s ON r.key = s.key").show()
# +---+------+---+------+
# |key| value|key| value|
# +---+------+---+------+
# |  2| val_2|  2| val_2|
# |  4| val_4|  4| val_4|
# |  5| val_5|  5| val_5|
# ...

在Spark repo中的“examples/src/main/python/sql/hive.py”中找到完整的示例代码。

一、指定Hive表的存储格式

创建Hive表时,需要定义该表应如何从文件系统读取数据/向文件系统写入数据,即“输入格式”和“输出格式”。你还需要定义此表应如何将数据反序列化为行,或将行序列化为数据,即“serde”。以下选项可用于指定存储格式(“serde”、“input format”、“output format”),例如CREATE TABLE src(id int) USING hive OPTIONS(fileFormat ‘parquet’)。默认情况下,我们将以纯文本形式读取表文件。请注意,创建表时还不支持Hive存储处理程序,你可以使用Hive端的存储处理程序创建表,并使用Spark SQL读取它。

Property NameMeaning
fileFormatfileFormat是一种存储格式规范包,包括“serde”、“input format”和“output format”。目前我们支持6种文件格式:‘sequencefile’, ‘rcfile’, ‘orc’, ‘parquet’, ‘textfile’和’avro’。
inputFormat, outputFormat这两个选项以字符串文字的形式指定相应的InputFormat和OutputFormat类的名称,例如org.apache.hadoop.hive.ql.io.orc.OrcInputFormat。这两个选项必须成对出现,如果已经指定了fileFormat选项,则不能指定它们。
serde此选项指定serde类的名称。当指定fileFormat选项时,如果给定的fileFormat已经包含了serde的信息,则不要指定该选项。目前“sequencefile”,“textfile”和“rcfile”不包括serde信息,你可以在这3种文件格式中使用这个选项。
fieldDelim, escapeDelim, collectionDelim, mapkeyDelim, lineDelim这些选项只能与"textfile" fileFormat一起使用。它们定义了如何将分隔的文件读入行。

所有其他用OPTIONS定义的属性将被视为Hive serde属性。

二、与不同版本的Hive Metastore交互

Spark SQL的Hive支持中最重要的部分之一是与Hive metastore的交互,它使Spark SQL能够访问Hive表的元数据。从Spark 1.4.0开始,使用下面描述的配置,可以使用Spark SQL的单个二进制构建来查询不同版本的Hive metastores。请注意,与用于与metastore对话的Hive版本无关,Spark SQL内部将根据内置Hive进行编译,并使用这些类进行内部执行(serdes、UDFs、UDAFs等)。
以下选项可用于配置用于检索元数据的Hive版本:

Property NameDefaultMeaningSince Version
spark.sql.hive.metastore.version2.3.9Hive metastore的版本。可用的选项是0.12.0到2.3.9和3.0.0到3.1.3。1.4.0
spark.sql.hive.metastore.jarsbuiltin应该用于实例化HiveMetastoreClient的jar的位置。此属性可以是以下四个选项之一: 1. builtin: 使用Hive 2.3.9,当启用-Phive时,它与Spark程序集捆绑在一起。选择此选项时,spark.sql.hive.metastore.version必须为2.3.9或未定义。 2. maven: 使用从Maven存储库下载的指定版本的Hive jar。通常不建议将此配置用于生产部署。 3. path:使用spark.sql.hive.metastore.jars.path配置的Hive jar,格式以逗号分隔。支持本地或远程路径。所提供的jar应该与spark.sql.hive.metastore.version版本相同。 4. JVM标准格式的类路径。这个类路径必须包含所有Hive及其依赖,包括Hadoop的正确版本。所提供的jar应该与spark.sql.hive.metastore.version版本相同。这些jar只需要存在于driver中,但如果你在yarn集群模式下运行,则必须确保它们与应用程序打包在一起。1.4.0
spark.sql.hive.metastore.jars.path(empty)用于实例化HiveMetastoreClient的jar的逗号分隔路径。只有当spark.sql.hive.metastore.jars被设置为path时,这个配置才有用。路径可以是以下任意格式: 1. file://path/to/jar/foo.jar 2. hdfs://nameservice/path/to/jar/foo.jar 3. /path/to/jar/(没有URI scheme的路径遵循conf fs.defaultFS的URI schema) 4. [http/https/ftp]: //path/to/jar/foo.jar 注意,1、2和3支持通配符。例如: 1. file://path/to/jar/*,file://path2/to/jar/*/*.jar 2. hdfs://nameservice/path/to/jar/*,hdfs://nameservice2/path/to/jar/*/*.jar3.1.0
spark.sql.hive.metastore.sharedPrefixescom.mysql.jdbc, org.postgresql, com.microsoft.sqlserver, oracle.jdbc一个逗号分隔的类前缀列表,应该使用Spark SQL和特定版本的Hive之间共享的类加载器加载。应该共享的类的一个示例是与metastore通信所需的JDBC驱动程序。其他需要共享的类是那些与已经共享的类交互的类。例如,log4j使用的自定义appender。1.4.0
spark.sql.hive.metastore.barrierPrefixes(empty)以逗号分隔的类前缀列表,应为Spark SQL正在通信的每个版本的Hive显式重新加载这些前缀。例如,在通常会共享的前缀中声明的Hive UDF(例如,org.apache.spark.*)。1.4.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

私接路由器导致部分终端(电脑、手机等)无法上网问题分析

【1】私接路由器场景 某公司办公网可以上互联网&#xff0c;网络终端通过公司路由器上的DHCP服务器自动获取IP地址&#xff0c;对终端设备接入没有做Mac地址绑定等策略限制&#xff0c;交换机也没有划分vlan。员工张三所在办公室网口太少或者WiFi信号差&#xff0c;私自找了一台…

前端实现 海浪(波浪)进度条效果(支持自定义长度;调节速度,2s缓冲结束)

实现海浪进度条 文章目录 实现海浪进度条效果图如下(投入使用的版本)背景和过程一、调试和探索过程(下面都会给出来对应代码)二、类似Element-plus的进度条样式1. CSS的样式如下2. HTML结构如下 二、电涌效果的进度条如下1. CSS的样式如下2. HTML的结构如下:3. JavaScript代码如…

推荐两款电脑文件处理工具,强大到你不舍得卸载

EasyFileCount EasyFileCount是一款基于Java开发的多功能文件管理工具&#xff0c;旨在帮助用户更轻松地管理和优化他们的文件存储。以下是EasyFileCount的主要功能和特点&#xff1a; 查看文件夹大小&#xff1a;用户可以快速统计和查看文件夹的总大小&#xff0c;实时显示各…

40.设计HOOK引擎的好处

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 上一个内容&#xff1a;39.右键弹出菜单管理游戏列表 以 39.右键弹出菜单管理游戏列表 它的代码为基础进行修改 效果图&#xff1a; 实现步骤&#xff1a; 首…

【海思Hi3403V100】多目拼接相机套板硬件规划方案

海思Hi3403V100 是专业超高清智能网络摄像头 SoC。该芯片最高支持四路 sensor 输入&#xff0c;支持最高 4K60fps 的 ISP 图像处理能力&#xff0c;支持 3F 、WDR、多级降噪、六轴防抖、硬件拼接、多光谱融合等多种传统图像增强和处理算法&#xff0c;支持通过AI 算法对输入图像…

视觉灵感的探索和分享平台

做设计没灵感&#xff1f;大脑一片空白&#xff1f;灵感是创作的源泉&#xff0c;也是作品的灵魂所在。工作中缺少灵感&#xff0c;这是每个设计师都会经历的苦恼&#xff0c;那当我们灵感匮乏的时候&#xff0c;该怎么办呢&#xff1f;别急&#xff0c;即时设计、SurfCG、Lapa…

基于sivaco设计仿真PT型IGBT和NPT型IGBT结构

本项目基于使用仿真软件SIVACO来仿真研究PT型和NPT型的IGBT结构特点&#xff0c;并且通过仿真研究对于不同的掺杂浓度、沟道宽度等对器件的特性产生不同的影响。 资料获取到咸&#x1f41f;&#xff1a;xy591215295250 \\\或者联系wechat 号&#xff1a;comprehensivable &…

HTML(15)——盒子模型

盒子模型组成 内容区域 -width&height内边距-padding &#xff08;出现在内容与盒子边缘之间&#xff09;边框线-border外边距-margin &#xff08;出现在盒子外面&#xff09; div { width: 200px; height: 200px; background-color: rgb(85, 226, 193); padding: 20px; …

未来一周比特币价格及数字货币市场预测

荷月的比特币市场就像过山车一样&#xff0c;仅仅六月下旬就跌去-12%&#xff0c;本周更是暴跌-6%&#xff0c;至 58,378美元。在这种市场表现&#xff0c;应有的踩踏如期而至。德国政府今日宣布再出售750 比特币的行为继续打击多头&#xff0c;但是小编认为这恰恰预示着市场可…

【Linux进阶】基础IO函数详解

1.函数open和openat 调用open或openat函数可以打开或创建一个文件。 #include <fcntl.h> int open(const char *path, int ofag, ... /* mode_t mode */);int openat (int fd, const char *path, int oflag, ... /* mode_t mode */); 我们将最后一个参数写为...&#x…

昇思25天学习打卡营第4天|数据变换 Transforms

昨天看到数据集&#xff0c;今天继续。 数据变换 众所周知&#xff0c;我们的原始数据基本不能直接丢进模型里面&#xff0c;需要作一定的操作才可以进行训练。 所以&#xff0c; mindspore为我们提供了一系列的数据变换手段。 针对图 调整像素的大小 ** Rescale **归一化 …

智慧会议会务解决方案

会务不仅仅是简单的活动策划&#xff0c;更是全方位的项目管理过程。然而&#xff0c;目前的会务领域仍存在着一些问题&#xff0c;直接影响着会务的效果和质量&#xff0c;如&#xff1a; 会议前期策划时间长&#xff0c;会务人员需要收集参会人员资料&#xff0c;准备会议材…

[C++深入] --- 类成员初始化的三种方式

1 类成员初始化的三种方式 1.1 三种方式介绍 初始化方式一:初始化列表 class A {public:int a; // 初始化列表A(int a_):a(a_){} };初始化列表是在构造函数冒号后对成员进行初始化,这是在成员被分配内存的同时进行的初始化操作。这样避免了成员变量先被默认构造然后再赋值…

突然!某大客户核心凌晨突然崩溃....

这几天实在太忙&#xff0c;刚弄完文档。业务线的同事就找到我&#xff0c;说一个银行客户的核心系统昨晚出了故障&#xff0c;还没找到原因&#xff0c;希望能帮忙分析下。 从提供的信息来看是业务跑任务报错&#xff0c;遇到了Oracle-00600和ora-07445 错误。 Doing block re…

机器学习-数据预处理-聚类-回归-分类-单车数据集

机器学习-数据预处理-聚类-回归-分类-单车数据集 前言一、数据预处理1. 导入数据集2. 数据预处理3. 处理缺失值4. 生成特征用于后续进一步的分析 二、数据分布可视化1. 骑行时长分布2. 起始站和终点站分布可视化3. 高峰期与非高峰期骑行频次分布 三、聚类分析1. K-means聚类 四…

GPU和CPU的架构分别是怎样的,有什么本质区别?GPU及CPU的架构在AI上的不同,和他们的技术体系区别

GPU 和 CPU 的架构及其在 AI 上的不同 引言 CPU&#xff08;中央处理器&#xff09;和 GPU&#xff08;图形处理单元&#xff09;是计算机系统中最重要的两种处理器。它们各自的架构设计和技术体系决定了其在不同应用领域中的性能和效率。本文将详细分析 CPU 和 GPU 的架构&a…

【代码随想录算法训练营第五十一天|115.不同的子序列、583. 两个字符串的删除操作、72.编辑距离】

文章目录 115.不同的子序列[583. 两个字符串的删除操作](https://leetcode.cn/problems/delete-operation-for-two-strings/description/)72.编辑距离 115.不同的子序列 dp数组表示s和t中前i-1和j-1项中s中出现过的t的次数&#xff0c;递推公式中当选择到s的第i-1的元素和t[j-…

java.io.Closeable接口介绍

java.io.Closeable 是 Java 标准库中的一个接口,位于 java.io 包中。它用于表示可以关闭的资源,例如文件流、网络连接等。实现了 Closeable 接口的类可以通过调用 close() 方法来释放资源。这对于确保资源不被泄漏非常重要。 使用 Closeable 接口主要是为了确保在使用完某些…

雅思词汇及发音积累 2024.6.27

monument /ˈmɒnjumənt/ n.纪念碑&#xff0c;纪念馆&#xff0c;纪念物&#xff1b;遗址&#xff0c;名胜古迹&#xff1b;典范&#xff1b;塑像&#xff0c;墓碑&#xff1b;有永久价值的作品 描述人的外表、衣着 gender 性别 medium build 中等身材 average height 不高不…

elasticsearch运维系列_用户及角色权限相关SQL及脚本整理

这篇文章介绍ES运维过程中一些常用查询权限和角色的命令和脚本&#xff0c;以及如何查询某个索引可被系统中哪些用户访问。 Part1 查询用户及权限 1 查询所有用户 首先&#xff0c;获取所有用户的列表&#xff1a; -- 命令如下 curl -u elastic:esuser -X GET "http:/…