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:

Querying the databases

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

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)中的表。如下:


上面的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情况,那么它会从元数据中删除表。

查询已经注册的函数

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

©著作权归作者所有:来自51CTO博客作者mob604756f47778的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 如何开始一个数据科学项目?
  2. 大数据技术完美地解决了海量数据问题,可为何还要搭建数据平台?
  3. 20201230 python数据类型
  4. 面板数据里处理多重高维固定效应的神器, 还可用工具变量处理内生
  5. Prometheus 之 所有业务容器指标的监控(即cadvisor数据)
  6. 面板数据计量方法全局脉络和程序使用指南篇
  7. CHNS2015重磅来袭,中国健康领域研究者的福音
  8. 双栏模型Hurdle远超Tobit, 对于归并数据舍我其谁
  9. 多期DID的经典文献big bad banks数据和do文件

随机推荐

  1. ionic emulate android log
  2. Android中ListVIew高度自适应,解决ScrollV
  3. cordova入门教程(五)给android apk签名
  4. Android ProgressBar 几乎全部的用法
  5. Android 记录开发中的一些问题
  6. Android AsyncHttpClient
  7. android实现定时拍照并发送微博功能
  8. Android: 更改语言时Launcher2更新apps
  9. Android Studio出错异常汇总
  10. Android Wear Preview- 为通知添加多个页