基本概念

Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块。 其前身是 Shark,给熟悉 RDBMS ,但又不理解 MapReduce 的技术人员提供快速上手的工具。 Shark 是伯克利实验室 Spark 生态环境的组件之一,是基于 Hive 所开发的工具,其能运行在 Spark 引擎上, SparkSQL无论在数据兼容、性能优化、组件扩展方面都得到了极大的方便。

  • 数据兼容方面 SparkSQL 不但兼容 Hive,还可以从 RDD、parquet 文件、JSON 文件中
    获取数据,未来版本甚至支持获取 RDBMS 数据以及 cassandra 等 NOSQL 数据;

  • 性能优化方面 除了采取 In-Memory Columnar Storage、byte-code generation 等优化技术
    外、将会引进 Cost Model 对查询进行动态评估、获取最佳物理计划等等;

  • 组件扩展方面 无论是 SQL 的语法解析器、分析器还是优化器都可以重新定义,进行扩
    展。

对于开发人员来讲,SparkSQL 可以简化 RDD 的开发,提高开发效率,且执行效率非常快,所以实际工作中,基本上采用的就是 SparkSQL。Spark SQL 为了简化 RDD 的开发,提高开发效率,提供了 2 个编程抽象,类似 Spark Core 中的 RDD :DataFrame 和 DataSet。

SparkSQL 特点

1.易整合

无缝的整合了 SQL 查询和 Spark 编程。

2.统一的数据访问

使用相同的方式连接不同的数据源。

3.兼容 Hive

在已有的仓库上直接运行 SQL 或者 HiveQL。

4.标准数据连接

通过 JDBC 或者 ODBC 来连接。

DataFrame

在 Spark 中,DataFrame 是一种以 RDD 为基础的分布式数据集,类似于传统数据库中的二维表格。DataFrame 与 RDD 的主要区别在于,前者带有 schema 元信息,即 DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得 Spark SQL 得以洞察更多的结构信息,从而对藏于 DataFrame 背后的数据源以及作用于 DataFrame 之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观 RDD,由于无从得知所存数据元素的具体内部结构,Spark Core 只能在 stage 层面进行简单、通用的流水线优化。 同时,与 Hive 类似,DataFrame 也支持嵌套数据类型(struct、array 和 map)。从 API 易用性的角度上看,DataFrame API 提供的是一套高层的关系操作,比函数式的 RDD API 要更加友好,门槛更低。

上图直观地体现了 DataFrame 和 RDD 的区别。
左侧的 RDD[Person]虽然以 Person 为类型参数,但 Spark 框架本身不了解 Person 类的内部结构。而右侧的 DataFrame 却提供了详细的结构信息,使得 Spark SQL 可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么。
DataFrame 是为数据提供了 Schema 的视图,可以把它当做数据库中的一张表来对待。 DataFrame 也是懒执行的,但性能上比 RDD 要高,主要原因:优化的执行计划,即查询计划通过 Spark catalyst optimiser 进行优化。

DataSet

DataSet 是分布式数据集合。DataSet 是 Spark 1.6 中添加的一个新抽象,是 DataFrame的一个扩展。它提供了 RDD 的优势(强类型,使用强大的 lambda 函数的能力)以及 Spark SQL 优化执行引擎的优点。DataSet 也可以使用功能性的转换(操作 map,flatMap,filter等等)。

  • DataSet 是 DataFrame API 的一个扩展,是 SparkSQL 最新的数据抽象
  • 用户友好的 API 风格,既具有类型安全检查也具有 DataFrame 的查询优化特性;
  • 用样例类来对 DataSet 中定义数据的结构信息,样例类中每个属性的名称直接映射到DataSet 中的字段名称;
  • DataSet 是强类型的。比如可以有 DataSet[Car],DataSet[Person]。
  • DataFrame 是 DataSet 的特列,DataFrame=DataSet[Row] ,所以可以通过 as 方法将DataFrame 转换为 DataSet。Row 是一个类型,跟 Car、Person 这些的类型一样,所有的表结构信息都用 Row 来表示。获取数据时需要指定顺序。

SparkSQL介绍相关推荐

  1. Spark _21 _SparkSQL介绍

    Shark Shark是基于Spark计算框架之上且兼容Hive语法的SQL执行引擎,由于底层的计算采用了Spark,性能比MapReduce的Hive普遍快2倍以上,当数据全部load在内存的话,将 ...

  2. spark-sql建表语句限制_SparkSQL

    SparkSQL介绍 Hive是Shark的前身,Shark是SparkSQL的前身,SparkSQL产生的根本原因是其完全脱离了Hive的限制. SparkSQL支持查询原生的RDD. RDD是Sp ...

  3. SparkSql学习记录

    目录 一.SparkSQL介绍 二.SparkSQL的编程模型(DataFrame和DataSet) 2.1 编程模型简介 2.2 RDD\DataSet\DataFrame 三者的区别 2.3 Sp ...

  4. 小白如何学习大数据开发,大数据学习路线是怎样的?

    零基础的同学学习大数据开发不能急于求成,要分阶段分步骤来一步步完成,科多大数据给大家来分享一下大数据的学习路线是什么?小白该怎么学习大数据呢,大概可以分为四步: 大数据学习资料分享群142973723 ...

  5. python spark视频_Spark2.x+Python大数据机器学习视频课程

    本课程系统讲解如何在Spark2.0上高效运用Python来处理数据并建立机器学习模型,帮助读者开发并部署高效可拓展的实时Spark解决方案. 第一章.搭建Spark 2.x+Python开发环境及基 ...

  6. 2018大数据学习路线从入门到精通

    最近很多人问小编现在学习大数据这么多,他们都是如何学习的呢.很多初学者在萌生向大数据方向发展的想法之后,不免产生一些疑问,应该怎样入门?应该学习哪些技术?学习路线又是什么?今天小编特意为大家整理了一份 ...

  7. 做为一名大数据新手,如何成为大数据工程师?附上学习路线

    这几年来大数据非常的热门,到处都有大数据分析的演讲. 演讲内容通常是宣传各种大数据分析成功的案例. 但实际上大数据该怎么做呢? 大部份的讨论似乎都仅止于怎么搜集大量的数据, 然后用个工具(hadoop ...

  8. 大数据学习路线图(2023完整版)适合收藏

    大数据开发是一门涉及处理和分析大规模数据的技术领域,随着大数据技术的不断发展和应用,对大数据开发人员的需求也在逐渐增加.就业前景相对较好,尤其在科技行业和数据驱动型企业中.大数据开发的前景还是有很多优 ...

  9. spark技术学习与思考(sparkcoresparksql)

    目录 1.spark 基础 1.1 spark 发展历程 1.2 spark 与 mapreduce 对比 1.3 spark 运行模式 1.4 spark 常用命令 1.5 spark 底层执行原理 ...

最新文章

  1. iOS一些实用的技巧
  2. 物联网白皮书【2018】重磅发布|今年的物联网产业交出了一张怎样的答卷
  3. insightface mxnet训练horovod版
  4. 深入浅出多线程系列之四:简单的同步 lock
  5. 360怎么看电脑配置_Win10系统自带杀毒和垃圾清理好么?需不需要安装360卫士
  6. 【软考-软件设计师】计算机指令系统
  7. css里calculate,calc() ---一个会计算的css属性
  8. 图解ARP协议(六)RARP与IARP:被遗忘的兄弟协议
  9. ImportError: No module named setuptools 解决方法
  10. 【CodeForces - 616C 】The Labyrinth点石成金(并查集,dfs)
  11. PHP中插件机制的一种实现方案
  12. 要重复多少次变成潜意识_新股要申购多少次才能保证一定中签?
  13. windows命令行设置和系统快捷键
  14. Linux下如何查找sqlnet.ora 和listener.ora 和tnsnames.ora 配置文件的目录
  15. Javascript特效:普通倒计时
  16. 从零基础入门Tensorflow2.0 ----一、3.2 实战深度神经网络(批归一化)
  17. 拓端tecdat|R语言中进行Spearman等级相关分析
  18. 新装的电脑执行maven install命令一直报Could not find artifact jdk.tools:jdk.tools:jar:1.7
  19. VBS以强制启用宏的方式打开EXCEL文件,无视用户设置
  20. linux内核空间和用户空间认识和区别

热门文章

  1. ARTS打卡计划第二周-Share-使用java注解对方法计时
  2. 【SSH网上商城项目实战23】完成在线支付功能
  3. rsync - 远程同步工具
  4. swift 笔记 (十二) —— 下标
  5. 空值排序(oracle/sqlserver)
  6. springside / springside4—CRUD页面教程
  7. 3.4.2 停止等待协议
  8. PCIe配置空间和PCI设备中的寄存器
  9. python colormap(颜色映射)自定义
  10. 将带空格的字符串去掉空格.join()函数