Spark SQL、DataFrame、DataSet是什么

这篇具有很好参考价值的文章主要介绍了Spark SQL、DataFrame、DataSet是什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在很多情况下,开发人员并不了解Scala语言,也不了解Spark常用的API,但又非常想要使用Spark框架提供的强大的数据分析能力。Spark的开发工程师们考虑到了这个问题,于是利用SQL语言的语法简洁、学习门槛低以及在编程语言中普及程度和流行程度高等诸多优势,开发了Spark SQL模块。通过Spark SQL,开发人员能够使用SQL语句实现对结构化数据的处理。

本文主要介绍什么是Spark SQL、什么是DataFrame和什么是DataSet。

1.  什么是Spark SQL

Spark SQL是Spark用于结构化数据(Structured Data)处理的Spark模块。与基本的Spark RDD API不同,Spark SQL的抽象数据类型为Spark提供了关于数据结构和正在执行的计算的更多信息。在内部,Spark SQL使用这些额外的信息去做一些优化。

有多种方式与Spark SQL进行交互,比如SQL和Dataset API。当计算结果的时候,这些接口使用相同的执行引擎,不依赖正在使用哪种API或者语言。这种统一也就意味着开发者可以很容易在不同的API之间进行切换,这些API提供了最自然的方式来表达给定的转换。

Hive是将Hive SQL转换成MapReduce,然后提交到集群上执行,大大简化了编写MapReduce程序的复杂性,但是MapReduce这种计算模型执行效率比较慢,所以Spark SQL应运而生,它将Spark SQL转换成RDD,然后提交到集群上执行,执行效率非常高。

Spark SQL提供了以下2个编程抽象,类似Spark Core中的RDD。

  • DataFrame。
  • DataSet。

 Spark SQL的特点说明如下:

  • (1)Integrated(易整合):Spark SQL无缝地整合了SQL查询和Spark编程。
    (2)Uniform Data Access(统一的数据访问方式):Spark SQL使用相同的方式连接不同的数据源。
    (3)Hive Integration(集成 Hive):Spark SQL在已有的仓库上直接运行SQL或者HiveQL。
    (4)Standard Connectivity(标准的连接方式):Spark SQL通过JDBC或者ODBC来连接。

2.  什么是DataFrame

与RDD类似,DataFrame也是一个分布式数据容器。

然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。

同时,DataFrame与Hive类似,也支持嵌套数据类型(struct、array和map)。

从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好、门槛更低。

DataFrame与RDD的区别如图所示。

Spark SQL、DataFrame、DataSet是什么,spark,sql,大数据

图中左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构。而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。

DataFrame为数据提供了schema视图,可以把它当作数据库中的一张表来对待。

DataFrame也是懒执行的,性能上比RDD要高,主要原因在于优化的执行计划—查询计划通过Spark Catalyst Optimiser(Catalyst优化器,基于Scala的函数式编程结构设计的可扩展优化器)进行优化。

为了说明查询优化,我们来看下图展示的数据分析的示例。

Spark SQL、DataFrame、DataSet是什么,spark,sql,大数据

图中构造了两个DataFrame,将它们join之后又做了一次filter操作。

如果原封不动地执行这个计划,最终的执行效率不是很高,因为join是一个代价较大的操作,也可能会产生一个较大的数据集。如果我们能将filter下推到join下方,先对DataFrame进行过滤,再join过滤后的较小的结果集,便可以有效缩短执行时间。而Spark SQL的查询优化器正是这样做的。简而言之,逻辑查询计划优化就是一个利用基于关系代数的等价变换,将高成本操作替换为低成本操作的过程。

3. 什么是DataSet

(1)DataSet是DataFrame API的一个扩展,也是Spark SQL最新的数据抽象(1.6版本新增)。

(2)用户友好的API风格,既具有类型安全检查,也具有DataFrame的查询优化特性。

(3)Dataset支持编解码器,当需要访问非堆上的数据时可以避免反序列化整个对象,提高了效率。

(4)样例类被用来在DataSet中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet中的字段名称。

(5)DataFrame是DataSet的特列,DataFrame=DataSet[Row],所以可以通过as方法将DataFrame转换为DataSet。Row是一个类型,跟Car、Person这些类型一样,所有的表结构信息都用Row来表示。

(6)DataSet是强类型的,比如可以有DataSet[Car]、DataSet[Person]等。

(7)DataFrame只是知道字段,但是不知道字段的类型,所以在执行这些操作时是没办法在编译的时候检查字段类型是否正确,比如我们对一个字符串进行减法操作,在执行的时候才报错。而DataSet不仅知道字段,还知道字段类型,所以有更严格的错误检查。

本文摘自《Spark入门与大数据分析实战》,获出版社和作者授权发布。

Spark SQL、DataFrame、DataSet是什么,spark,sql,大数据文章来源地址https://www.toymoban.com/news/detail-530215.html

到了这里,关于Spark SQL、DataFrame、DataSet是什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark RDD、DataFrame、DataSet比较

    在Spark的学习当中,RDD、DataFrame、DataSet可以说都是需要着重理解的专业名词概念。尤其是在涉及到数据结构的部分,理解清楚这三者的共性与区别,非常有必要。 RDD,作为Spark的核心数据抽象,是Spark当中不可或缺的存在,而在SparkSQL中,Spark为我们提供了两个新的抽象,分别

    2024年02月04日
    浏览(29)
  • 14 | Spark SQL 的 DataFrame API 读取CSV 操作

    sales.csv 内容 当使用 Spark SQL 的 DataFrame API 读取 CSV 文件时,你可以按照以下步骤进行操作。

    2024年02月09日
    浏览(28)
  • Spark的核心概念:RDD、DataFrame和Dataset

    Apache Spark,其核心概念包括RDD(Resilient Distributed Dataset)、DataFrame和Dataset。这些概念构成了Spark的基础,可以以不同的方式操作和处理数据,根据需求选择适当的抽象。 RDD是Spark的基本数据抽象,它代表一个不可变、分布式的数据集合。下面我们将更详细地探讨RDD: RDD的特性

    2024年02月04日
    浏览(28)
  • Spark(39):Streaming DataFrame 和 Streaming DataSet 输出

    目录 0. 相关文章链接 1. 输出的选项 2. 输出模式(output mode) 2.1. Append 模式(默认) 2.2. Complete 模式 2.3. Update 模式 2.4. 输出模式总结 3. 输出接收器(output sink) 3.1. file sink 3.2. kafka sink 3.2.1. 以 Streaming 方式输出数据 3.2.2. 以 batch 方式输出数据 3.3. console sink 3.4. memory sink 3.5. fo

    2024年02月13日
    浏览(29)
  • 大数据技术之Spark——Spark SQL

            Spark SQL是Spark用于结构化数据处理的Spark模块。         我们之前学习过hive,hive是一个基于hadoop的SQL引擎工具,目的是为了简化mapreduce的开发。由于mapreduce开发效率不高,且学习较为困难,为了提高mapreduce的开发效率,出现了hive,用SQL的方式来简化mapreduce:hiv

    2024年02月12日
    浏览(36)
  • Spark SQL数据源:JDBC

    Spark SQL还可以使用JDBC API从其他关系型数据库读取数据,返回的结果仍然是一个DataFrame,可以很容易地在Spark SQL中处理,或者与其他数据源进行连接查询。 在使用JDBC连接数据库时可以指定相应的连接属性 属性 介绍 url 连接的JDBC URL driver JDBC驱动的类名 user 数据库用户名 pass

    2024年02月09日
    浏览(31)
  • 【Spark大数据习题】习题_Spark SQL&&&Kafka&& HBase&&Hive

    PDF资源路径-Spark1 PDF资源路径-Spark2 一、填空题 1、Scala语言的特性包含面向对象编程、函数式编程的、静态类型的、可扩展的、可以交互操作的。 2、在Scala数据类型层级结构的底部有两个数据类型,分别是 Nothing和Null。 3、在Scala中,声明变量的有var声明变量和val声明常

    2024年02月06日
    浏览(30)
  • Spark大数据处理讲课笔记4.1 Spark SQL概述、数据帧与数据集

      目录 零、本讲学习目标 一、Spark SQL (一)Spark SQL概述 (二)Spark SQL功能 (三)Spark SQL结构 1、Spark SQL架构图 2、Spark SQL三大过程 3、Spark SQL内部五大组件 (四)Spark SQL工作流程 (五)Spark SQL主要特点 1、将SQL查询与Spark应用程序无缝组合 2、Spark SQL以相同方式连接多种数据

    2024年02月09日
    浏览(57)
  • Spark大数据处理讲课笔记4.2 Spark SQL数据源 - 基本操作

      目录 零、本讲学习目标 一、基本操作 二、默认数据源 (一)默认数据源Parquet (二)案例演示读取Parquet文件 1、在Spark Shell中演示 2、通过Scala程序演示 三、手动指定数据源 (一)format()与option()方法概述 (二)案例演示读取不同数据源 1、读取房源csv文件 2、读取json,保

    2024年02月09日
    浏览(33)
  • Spark SQL数据源:Hive表

    Spark SQL还支持读取和写入存储在Apache Hive中的数据。然而,由于Hive有大量依赖项,这些依赖项不包括在默认的Spark发行版中,如果在classpath上配置了这些Hive依赖项,Spark就会自动加载它们。需要注意的是,这些Hive依赖项必须出现在所有Worker节点上,因为它们需要访问Hive序列化

    2024年02月11日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包