spark SQL之Catalog API使用
Catalog API简介
Spark中的DataSet和Dataframe API支持结构化分析。结构化分析的一个重要的方面是管理元数据。这些元数据可能是一些临时元数据(比如临时表)、SQLContext上注册的UDF以及持久化的元数据(比如Hivemeta store或者HCatalog)。
Spark的早期版本是没有标准的API来访问这些元数据的。用户通常使用查询语句(比如show tables
)来查询这些元数据。这些查询通常需要操作原始的字符串,而且不同元数据类型的操作也是不一样的。
这种情况在Spark 2.0中得到改变。Spark 2.0中添加了标准的API(称为catalog)来访问Spark SQL中的元数据。这个API既可以操作Spark SQL,也可以操作Hive元数据。
访问Catalog
Catalog可以通过SparkSession获取,下面代码展示如何获取Catalog:
import org.apache.spark.sql.SparkSession val sparkSession = SparkSession.builder.appName("example").enableHiveSupport().getOrCreate() val catalog = sparkSession.catalog
访问databases
我们一旦创建好catalog对象之后,我们可以使用它来查询元数据中的数据库,catalog上的API返回的结果全部都是dataset。
scala> catalog.listDatabases().show(false) +----------+--------------------+--------------------+
| name| description | locationUri |
+----------+--------------------+--------------------+
|data_clean| |hdfs://asiainfo-1...|
|default |Default Hive data...|hdfs://asiainfo-1...|
+----------+--------------------+--------------------+ scala> catalog.listDatabases().select("name").show(false)
+-----------------------+
|name |
+-----------------------+
|iteblog |
|default |
+-----------------------+
listDatabases
返回元数据中所有的数据库。
默认情况下,元数据仅仅只有名为default的数据库。如果是Hive元数据,那么它会从Hive元数据中获取所有的数据库。listDatabases
返回的类型是dataset,所以我们可以使用Dataset上的所有操作来查询元数据。
使用createTempView注册Dataframe
在Spark的早期版本,我们使用registerTempTable
来注册Dataframe。然而在Spark 2.0中,这个API已经被遗弃了。registerTempTable
名字很让人误解,因为用户会认为这个函数会将Dataframe持久化并且保证这个临时表,但是实际上并不是这样的,所以社区才有意将它替换成createTempView
。createTempView
的使用方法如下:
df.createTempView("temp")
查询表
正如我们可以展示出元数据中的所有数据库一样,我们也可以展示出元数据中某个数据库中的表。它会展示出Spark SQL中所有注册的临时表。同时可以展示出Hive中默认数据库(也就是default)中的表。如下:
scala> catalog.listTables().select("name").show(false)
+----------------------------------------+
|name |
+----------------------------------------+
|city_to_level |
|table2 |
|test |
|ticket_order |
|tmp1_result |
+----------------------------------------+
判断某个表是否缓存
我们可以使用Catalog提供的API来检查某个表是否缓存。如下:
scala> println(catalog.isCached("temp"))
false
上面判断temp表是否缓存,结果输出false。默认情况下表是不会被缓存的,我们可以手动缓存某个表,如下:
scala> df.cache()
res4: df.type = [_c0: string, _c1: string ... more fields] scala> println(catalog.isCached("temp"))
true
现在iteblog表已经被缓存了,所有现在的输出结构是true。
删除view
我们可以使用catalog提供的API来删除view。如果是Spark SQL情况,那么它会删除事先注册好的view;如果是hive情况,那么它会从元数据中删除表。
scala> catalog.dropTempView("iteblog"
查询已经注册的函数
我们不仅可以使用Catalog API操作表,还可以用它操作UDF。下面代码片段展示SparkSession上所有已经注册号的函数,当然也包括了Spark内置的函数。
scala> catalog.listFunctions().select("name","className","isTemporary").show(, false)
+---------------------+-----------------------------------------------------------------------+-----------+
|name |className |isTemporary|
+---------------------+-----------------------------------------------------------------------+-----------+
|! |org.apache.spark.sql.catalyst.expressions.Not |true |
|% |org.apache.spark.sql.catalyst.expressions.Remainder |true |
|& |org.apache.spark.sql.catalyst.expressions.BitwiseAnd |true |
|* |org.apache.spark.sql.catalyst.expressions.Multiply |true |
|+ |org.apache.spark.sql.catalyst.expressions.Add |true |
+---------------------+-----------------------------------------------------------------------+-----------+
参考:https://blog.csdn.net/pengzonglu7292/article/details/81044857
spark SQL之Catalog API使用的更多相关文章
- Spark SQL 编程API入门系列之Spark SQL支持的API
不多说,直接上干货! Spark SQL支持的API SQL DataFrame(推荐方式,也能执行SQL) Dataset(还在发展) SQL SQL 支持basic SQL syntax/Hive ...
- Spark学习之路(九)—— Spark SQL 之 Structured API
一.创建DataFrame和Dataset 1.1 创建DataFrame Spark中所有功能的入口点是SparkSession,可以使用SparkSession.builder()创建.创建后应用 ...
- Spark 系列(九)—— Spark SQL 之 Structured API
一.创建DataFrame和Dataset 1.1 创建DataFrame Spark 中所有功能的入口点是 SparkSession,可以使用 SparkSession.builder() 创建.创 ...
- Spark记录-org.apache.spark.sql.hive.HiveContext与org.apache.spark.sql.SQLContext包api分析
HiveContext/SQLContext val hiveContext=new HiveContext(new SparkContext(new SparkConf().setAppName(& ...
- 平易近人、兼容并蓄——Spark SQL 1.3.0概览
自2013年3月面世以来,Spark SQL已经成为除Spark Core以外最大的Spark组件.除了接过Shark的接力棒,继续为Spark用户提供高性能的SQL on Hadoop解决方案之外, ...
- 【转载】Spark SQL 1.3.0 DataFrame介绍、使用
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=1 1.DataFrame是什么?2.如何创建DataF ...
- Spark SQL 编程
Spark SQL的依赖 Spark SQL的入口:SQLContext 官方网站参考 https://spark.apache.org/docs/1.6.2/sql-programming-guid ...
- win7下本地运行spark以及spark.sql.warehouse.dir设置
SparkSession spark = SparkSession .builder() .master("local[*]") .enableHiveSupport() .con ...
- Spark SQL 之自定义删除外部表
前言 Spark SQL 在删除外部表时,本不能删除外部表的数据的.本篇文章主要介绍如何修改Spark SQL 源码实现在删除外部表的时候,可以带额外选项来删除外部表的数据. 本文的环境是我一直使用的 ...
随机推荐
- PHP面试 PHP基础知识 二(常量及数据类型)
常量及数据类型 PHP八种数据类型 四种标量类型 字符串(string).布尔(boolean).浮点(float/double).整型(integer) 两种复合类型 数组(array).对象(ob ...
- form提交跳转问题
$.ajax({ type: "POST", url: url, data: $('.form-horizontal').serialize(), 提交form表单 success ...
- PE代码段中的数据
PE代码段中可能包含一些数据,比如 optional header中的data directory会索引到一些数据,比如import/export table等等: 还有一些jump table/sw ...
- 词表征 3:GloVe、fastText、评价词向量、重新训练词向量
原文地址:https://www.jianshu.com/p/ca2272addeb0 (四)GloVe GloVe本质是加权最小二乘回归模型,引入了共现概率矩阵. 1.基本思想 GloVe模型的目标 ...
- GIT 学习第二天 (二)
工作区和暂存区 工作区: 就是你在电脑里能看到的目录,比如:webgit 文件夹 就是一个工作区 版本库: 工作区有一个隐藏目录 .git ,这个不算工作区,而是Git的版本库 Git的版本库里存了很 ...
- error C4996: 'getcwd': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getcwd. See online help for details. c:\users\12968\desktop\testapp\testapp\testapp.c
解决办法: 属性>C/C++>预处理器定义>分别输入: _CRT_SECURE_NO_WARNINGS _CRT_SECURE_NO_DEPRECATE >保存退出即可
- Java 序列化和反序列化(二)Serializable 源码分析 - 1
目录 Java 序列化和反序列化(二)Serializable 源码分析 - 1 1. Java 序列化接口 2. ObjectOutputStream 源码分析 2.1 ObjectOutputSt ...
- Java高级进阶:自定义ClassLoader
假如我们的类不在classpath下,而我们又想读取一个自定义的目录下的class,如果做呢? 读取自定义目录的类 示例读取c:/test/com/test.jdk/Key.class这个类. pac ...
- C#WinForm 窗体回车替换Tab
/// <summary> /// 回车切换控件 /// </summary> /// <param name="sender"></pa ...
- python语言和R语言实现机器学习算法
<转>机器学习系列(9)_机器学习算法一览(附Python和R代码) 转自http://blog.csdn.net/han_xiaoyang/article/details/51191 ...