Pyspark中catalog的作用与常用方法

ops/2024/9/20 1:18:59/ 标签: python, pyspark, hive, 大数据, 详细, hadoop

文章目录

  • Pyspark catalog用法
    • catalog 介绍
    • cache 缓存表
    • uncache 清除缓存表
    • cleanCache 清理所有缓存表
    • createExternalTable 创建外部表
    • currentDatabase 返回当前默认库
    • tableExists 检查数据表是否存在,包含临时视图
    • databaseExists 检查数据库是否存在
    • dropGlobalTempView 删除全局临时视图
    • dropTempView 删除临时视图
    • functionExists 检查函数是否存在
    • getDatabase 获取具有指定名称的数据库
    • getFunction 获取方法
    • getTable 获取数据表
    • isCached 检查是否缓存成功
    • listCatalogs 列出可用的catalogs
    • listColumns 返回数据表的列信息
    • listDatabases 获取数据库列表
    • listTables 获取数据表,包含临时视图
    • setCurrentDatabase 设置当前数据库
    • refreshTable 刷新缓存
    • refreshByPath 刷新路径
    • recoverPartitions 恢复分区

Pyspark catalog用法

catalog 介绍

Catalog是Spark中用于管理元数据信息的接口,这些元数据可能包括库、内部或外部表、函数、表列及临时视图等。

总的来说,PySpark Catalogs是PySpark框架中用于管理和查询元数据的重要组件,它使得Python用户能够更有效地利用PySpark进行大数据处理和分析。

spark = SparkSession.builder.appName('LDSX_TEST') \.config('hive.metastore.uris', 'thrift://hadoop01:9083') \.config('spark.master',"local[2]" ) \.enableHiveSupport().getOrCreate()

cache 缓存表

可以设置缓存等级,默认缓存等级为MEMORY_AND_DISK,是数据表级别的缓存,跟缓存dataframe存在区别,

设置不存在的表报错

# 缓存数据表
spark.catalog.cacheTable('ldsx_test.ldsx_table_one')
#检查是否缓存成功
ldsx = spark.catalog.isCached('ldsx_test.ldsx_table_one')
>True

uncache 清除缓存表

当表不存在数据库会报错

spark.catalog.uncacheTable("ldsx_test.ldsx_table_one")

cleanCache 清理所有缓存表

spark.catalog.clearCache()

createExternalTable 创建外部表

# spark.catalog.createExternalTable(#     tableName='ldsx_test_table',#     path = './ldsx_one.csv',#     database='ldsx_test',## )

currentDatabase 返回当前默认库

返回当前默认所在数据库spark.catalog.setCurrentDatabase 设置所在数据库

data = spark.catalog.currentDatabase()

tableExists 检查数据表是否存在,包含临时视图

data = spark.catalog.tableExists('ldsx_test.ldsx_table_one')
>True

databaseExists 检查数据库是否存在

data = spark.catalog.databaseExists('ldsx_test')

dropGlobalTempView 删除全局临时视图

全局临时表查找时候需要指向global_temp

要删除的表不存在报错

#创建全局临时表
spark.createDataFrame([(1, 1)]).createGlobalTempView("my_table")
#注意查询时候需要指向 global_temp
spark.sql('select * from global_temp.my_table').show()
#删除全局临时
ldsx= spark.catalog.dropGlobalTempView("my_table")

dropTempView 删除临时视图

要删除的表不存在报错

#创建临时表
spark.createDataFrame([(1, 1)]).createTempView("my_table")
spark.sql('select * from my_table').show()
#删除临时表
ldsx = spark.catalog.dropTempView("my_table")

functionExists 检查函数是否存在

spark.catalog.functionExists("count")
>True

getDatabase 获取具有指定名称的数据库

data = spark.catalog.getDatabase("ldsx_test")
print(data)
>>Database(name='ldsx_test', catalog='spark_catalog', description='', locationUri='hdfs://master:7171/home/ldsx/opt/hadoopData/hive_data/ldsx_test.db')

getFunction 获取方法

获取不到方法报错

spark.sql("CREATE FUNCTION my_func1 AS 'test.org.apache.spark.sql.MyDoubleAvg'")
data = spark.catalog.getFunction("my_func1")
print(data)
>>Function(name='my_func1', catalog='spark_catalog', namespace=['default'], description='N/A.', className='test.org.apache.spark.sql.MyDoubleAvg', isTemporary=False)

getTable 获取数据表

获取不到表报错

data = spark.catalog.getTable("ldsx_table_one")
print(data)
>>Table(name='ldsx_table_one', catalog='spark_catalog', namespace=['ldsx_test'], description=None, tableType='MANAGED', isTemporary=False)

isCached 检查是否缓存成功

# 缓存数据表
spark.catalog.cacheTable('ldsx_test.ldsx_table_one')
data = spark.catalog.isCached('ldsx_test.ldsx_table_one')
>True

listCatalogs 列出可用的catalogs

catalogs =  spark.catalog.listCatalogs()
print(catalogs)

listColumns 返回数据表的列信息

# 参数:数据表,数据库
catalogs =  spark.catalog.listColumns('ldsx_table_one','ldsx_test')
print(catalogs)
>>    [Column(name='age', description='??', dataType='string', nullable=True, isPartition=False, isBucket=False),Column(name='name', description='??', dataType='string', nullable=True, isPartition=False, isBucket=False),Column(name='fraction', description='??', dataType='string', nullable=True, isPartition=False, isBucket=False),Column(name='class', description='??', dataType='string', nullable=True, isPartition=False, isBucket=False),Column(name='gender', description='??', dataType='string', nullable=True, isPartition=False, isBucket=False)]

listDatabases 获取数据库列表

data1 = spark.catalog.listDatabases()
print(data1)
>>[Database(name='default', catalog='spark_catalog', description='Default Hive database',locationUri='hdfs://master:7171/home/ldsx/opt/hadoopData/hive_data'),
Database(name='ldsx_test', catalog='spark_catalog', description='',locationUri='hdfs://master:7171/home/ldsx/opt/hadoopData/hive_data/ldsx_test.db')]

listTables 获取数据表,包含临时视图

# 展示数据库中数据表以及临时视图
spark.catalog.setCurrentDatabase('ldsx_test')
spark.createDataFrame([(1,1)]).createTempView('TEST')
data = spark.catalog.listTables()
print(data)
>>[Table(name='ldsx_table_one', catalog='spark_catalog', namespace=['ldsx_test'], description=None,tableType='MANAGED', isTemporary=False),Table(name='TEST', catalog=None, namespace=[], description=None, tableType='TEMPORARY', isTemporary=True)]

setCurrentDatabase 设置当前数据库

spark.catalog.setCurrentDatabase('ldsx_test')
data = spark.catalog.currentDatabase()
print(data)
>> ldsx_test

refreshTable 刷新缓存

看官网案例是,刷新已经缓存的表
当一个表执行了cacheTable后,元数据有变动使用refreshTable进行元数据刷新

refreshByPath 刷新路径

# 假设有一个 Hive 表,其数据存储在 HDFS 上的某个路径
path = "/user/hive/warehouse/mydb.db/mytable"
# 刷新该路径下的表或分区信息
spark.catalog.refreshByPath(path)
df = spark.sql("SELECT * FROM mydb.mytable")
df.show()

recoverPartitions 恢复分区

recoverPartitions尝试恢复 Hive 表中丢失的分区信息,实际使用后更新

http://www.ppmy.cn/ops/107060.html

相关文章

标准库标头 <filesystem> (C++17)学习

此头文件是文件系统支持库的一部分。本篇介绍filesystem命名空间的一些函数。 函数 在命名空间 std::filesystem 定义 absolute (C17) 组成一个绝对路径 (函数) canonicalweakly_canonical (C17) 组成一个规范路径 (函数) relativeproximate (C17) 组成一个相对路径 (函数) c…

Why I‘m getting 404 Resource Not Found to my newly Azure OpenAI deployment?

题意:为什么我新部署的Azure OpenAI服务会出现404资源未找到的错误? 问题背景: Ive gone through this quickstart and I created my Azure OpenAI resource created a model deployment which is in state succeedded. I also playaround …

PowerShell脚本编写:自动化Windows开发工作流程实例介绍

PowerShell脚本编写:自动化Windows开发工作流程 大家好,我是吃点李子,今天我想和大家分享一下如何利用PowerShell脚本编写来自动化我们的日常工作流程。作为一名开发者,我们经常会遇到一些重复性的工作,比如部署环境、…

遥控器显示分别对应的无人机状态详解!!

1. 电量显示 遥控器电量:遥控器上通常会显示自身的电池电量,以提醒用户及时充电。 无人机电量:部分高端遥控器还会显示无人机的电池电量,以进度条或百分比的形式表示,帮助用户了解无人机的续航能力。 2. 飞行模式与…

信号槽、父子关系、隐式共享

1. Qt基础 - connect(…):连接了"OK"按钮至QDialog的accept槽函数,以及"Cancel"按钮至QDialog的reject槽函数。根据结果判断按下的是"OK"按钮还是"Cancel"按钮。 - parent-child机制:当建立一个物…

2024最新技术!使用Golang Beego开发的社区老人健康管理系统,Vue前端交互流畅,大数据分析助力健康趋势预测

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

装WebVideoCreator记录

背景,需要在docker容器内配置WebVideoCreator环境,配置npm、node.js WebVideoCreator地址:https://github.com/Vinlic/WebVideoCreator 配置环境,使用这个教程: linux下安装node和npm_linux离线安装npm-CSDN博客 1…

el-date-picker年份选择默认值为当前年,并且将获取时间转为年月日格式

<el-date-pickervalue-format"yyyy"v-model"leftQuery.year":disabled"timeArr && timeArr.length ! 0 ? true : false"type"year"placeholder"选择年"changechangeYear:picker-options"pickerOptions&quo…

Web3社交新经济,与 SOEX 实现无缝交易的高级安全性

出于充分的理由&#xff0c;安全性是交易中至关重要的考虑因素。每个人都应该确保自己的资金在交易时是安全的。由于 &#xff33;&#xff2f;&#xff25;&#xff38; 充当您与交易所的最佳连接&#xff0c;因此必须强调的是&#xff0c;该系统不会引发任何安全问题。 &a…

[Redis] 分布式系统与Redis介绍

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

查看 MPP 的日志信息

获取mpp运行错误的日志 cat /dev/logmpp // ctrl+c 取消 all=3 默认的 只有错误才会打印 修改日志等级 echo “all=7” > /proc/umap/logmpp cat /proc/umap/logmpp //查看各个模块当前的设置 cat /proc/umap

Java基于微信小程序的美食推荐小程序,附源码

博主介绍&#xff1a;✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不…

PMP--谋定而后动

文章目录 技巧一模二模三模9.资源管理--问题解决--谋定而后动14.敏捷–人员–教练/项目经理–仆人式领导–职责–核心工作–消除障碍&#xff1b;–作用–促进合作&#xff08;题干关键词 “促进合作、清除障碍、指导团队”。&#xff09;&#xff1a;148、 [单选] 在评估当前冲…

基于 AC 驱动的电容结构 GaN LED 模型开发和应用

随着芯片尺寸减小&#xff0c;微小尺寸GaN 基 Micro LED 显示面临着显示与驱动高密度集成的难题&#xff0c;传统直流&#xff08;DC&#xff09;驱动技术会导致结温上升&#xff0c;降低器件寿命。南京大学团队创新提出交流&#xff08;AC&#xff09;驱动的单电极 LED&#x…

使用Ansible进行自动化运维

引言 简介 自动化运维在现代IT基础架构管理中扮演着重要角色。通过自动化&#xff0c;我们可以提高效率、减少人为错误和加速部署流程。本篇文章将深入介绍如何使用Ansible这款强大的工具来实现自动化运维&#xff0c;帮助你简化服务器管理和配置任务。 什么是Ansible&#…

零基础国产GD32单片机编程入门(十二)FreeRTOS实时操作系统移植含源码

文章目录 一.概要二.什么是实时操作系统三.FreeRTOS的特性四.FreeRTOS的任务详解1.任务函数定义2.任务的创建3.任务的调度原理 五.FreeRTOS系统移植到GD32F103C8T6单片机1.硬件准备2.程序移植3.调试FreeRTOS任务调度 六.工程源代码下载七.小结 一.概要 FreeRTOS是一个迷你的实…

DWG如何转换成PDF?总结了四种转换

DWG如何转换成PDF&#xff1f;在日常工作和学习中&#xff0c;经常需要将CAD软件中的DWG文件转换为PDF格式&#xff0c;以便于更广泛地分享和查阅。那么具体要怎么做&#xff0c;才能实现两种格式的顺利转换呢&#xff1f;为了帮助读者轻松完成这一任务&#xff0c;本文将详细介…

自定义v-model的两种形式

1 使用update &#xff08;1&#xff09;在组件中使用v-model"value" &#xff08;2&#xff09;props中接收modelValue &#xff08;3&#xff09;然后在value值发生变化的时候&#xff1a;this.$emit("update:modelValue", this.value); &#xff08;4&…

深度马尔可夫模型deep markov 为序列数据建立一个深度概率模型:深度马尔可夫模型 pyro pytorch,python编程

深度马尔可夫模型 介绍 我们将为序列数据建立一个深度概率模型:深度马尔可夫模型。我们想要建模的特定数据集由复调音乐片段组成。序列中的每个时间片跨越一个四分音符&#xff0c;由一个88维的二进制向量表示&#xff0c;该向量在该时间步长对音符进行编码。 由于音乐(显然)在…

DevExpress WinForms v24.1新版亮点:功能区、数据编辑器全新升级

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…