Spark 2.0介绍:Catalog API介绍和使用

Spark 2.0介绍:Catalog API介绍和使用

iteblog 过往记忆大数据

  《Spark 2.0技术预览:更容易、更快速、更智能》文章中简单地介绍了Spark 2.0带来的新技术等。Spark 2.0是Apache Spark的下一个主要版本。此版本在架构抽象、API以及平台的类库方面带来了很大的变化,为该框架明年的发展奠定了方向,所以了解Spark 2.0的一些特性对我们能够使用它有着非常重要的作用。本博客将对Spark 2.0进行一序列的介绍(参见Spark 2.0分类http://www.iteblog.com/archives/tag/spark-2-0),欢迎关注。

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 API。

访问Catalog

  Catalog可以通过SparkSession获取,下面代码展示如何获取Catalog:

Spark 2.0介绍:Catalog API介绍和使用

Querying the databases

  我们一旦创建好catalog对象之后,我们可以使用它来查询元数据中的数据库,catalog上的API返回的结果全部都是dataset。

Spark 2.0介绍:Catalog API介绍和使用

listDatabases返回元数据中所有的数据库。默认情况下,元数据仅仅只有名为default的数据库。如果是Hive元数据,那么它会从Hive元数据中获取所有的数据库。listDatabases返回的类型是dataset,所以我们可以使用Dataset上的所有操作来查询元数据。

使用createTempView注册Dataframe

  在Spark的早期版本,我们使用registerTempTable来注册Dataframe。然而在Spark 2.0中,这个API已经被遗弃了。registerTempTable名字很让人误解,因为用户会认为这个函数会将Dataframe持久化并且保证这个临时表,但是实际上并不是这样的,所以社区才有意将它替换成createTempView。createTempView的使用方法如下:


df.createTempView("iteblog")

我们注册完一个view之后,然后就可以使用listTables函数来查询它。

查询表

  正如我们可以展示出元数据中的所有数据库一样,我们也可以展示出元数据中某个数据库中的表。它会展示出Spark SQL中所有注册的临时表。同时可以展示出Hive中默认数据库(也就是default)中的表。如下:

Spark 2.0介绍:Catalog API介绍和使用
上面的iteblog表就是使用df.createTempView("iteblog")注册的临时表。

判断某个表是否缓存

  我们可以使用Catalog提供的API来检查某个表是否缓存。如下:


scala> println(catalog.isCached("iteblog"))
false

上面判断iteblog表是否缓存,结果输出false。默认情况下表是不会被缓存的,我们可以手动缓存某个表,如下:


scala>  df.cache()
res4: df.type = [_c0: string, _c1: string ... 2 more fields]

scala> println(catalog.isCached("iteblog"))
true

现在iteblog表已经被缓存了,所有现在的输出结构是true。

删除view

  我们可以使用catalog提供的API来删除view。如果是Spark SQL情况,那么它会删除事先注册好的view;如果是hive情况,那么它会从元数据中删除表。

Spark 2.0介绍:Catalog API介绍和使用

查询已经注册的函数

  我们不仅可以使用Catalog API操作表,还可以用它操作UDF。下面代码片段展示SparkSession上所有已经注册号的函数,当然也包括了Spark内置的函数。

Spark 2.0介绍:Catalog API介绍和使用

上一篇:laravel 封装公共的导出方法(前后端分离)


下一篇:使用for-each循环的三种情况