Spark(八)SparkSQL概述

news/2024/11/16 15:43:51/文章来源:https://www.cnblogs.com/shihongpin/p/18428328

概述

  • Hive是将SQL转为MapReduce
  • SparkSQL可以理解成是将SQL解析成:“RDD+优化”再执行
  • SparkSQL可以简化RDD的开发,提高开发效率,且执行效率非常快
  • Spark SQL为了简化RDD的开发,提高开发效率,提供了2个编程抽象,DataFrame和DataSet,类似Spark Core中的RDD

1. SparkSQL特点

  • 易整合:无缝的整合了SQL查询和Spark编程
  • 统一的数据访问:使用相同的方式连接不同的数据源
  • 兼容Hive:在已有的仓库上直接运行SQL或者HiveSQL
  • 标准数据连接:通过JDBC或者ODBC来连接

2. 数据分类

定义 特点 举例
结构化数据 有固定的Schema 有预定义的Schema 关系型数据库的表
半结构化数据 没有固定的Schema,但是有结构 没有固定的Schema,有结构信息,数据一般是自描述的 指一些有结构的文件格式,例如JSON
非结构化数据 没有固定Schema,也没有结构 没有固定Schema,也没有结构 指图片/音频之类的格式
  • RDD主要用于处理非结构化数据、半结构化数据、结构化
  • SparkSQL是一个既支持SQL又支持命令式数据处理的工具
  • SparkSQL主要用于处理结构化数据(较为规范的半结构化数据也可以处理)

SparkSQL数据抽象

1. DataFrame

  • 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格
  • DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型
  • DataFrame支持嵌套数据类型(struct、array和map)


DataFrame和RDD的区别

  • 左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构,而右侧的DataFrame却提供了详细的结构信息
  • DataFrame是为数据提供了Schema的视图,可以把它当做数据库中的一张表来对待
  • DataFrame也是懒执行的,但性能上比RDD要高

2. DataSet

  • DataSet是分布式数据集合,是DataFrame的一个扩展
  • DataSet也可以使用功能性的转换(操作map,flatMap,filter等等)
  • DataFrame是DataSet的特列,DataFrame=DataSet[Row],所以可以通过as方法将DataFrame转换为DataSet,Row是一个类型,跟Car、Person这些的类型一样,所有的表结构信息都用Row来表示。获取数据时需要指定顺序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/802670.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux C++ 开发10 - 手把手教你使用valgrind性能分析工具

1. 什么是valgrind? 2. (Ubuntu)安装valgrind 3. valgrind工具的使用3.1. 命令的语法格式 3.2. 工具选项 3.3. LOG信息输出 3.4. Demo演示《Linux C++ 开发9 - 手把手教你使用gprof性能分析工具》一文中,我们讲解了gprof工具的使用方法,本文将继续讲解valgrind工具的使用方法…

js DOM学习的综合样例

js DOM学习的综合样例 本人简单学习了一点md语法,写出来的博客会更好看喵. 样例介绍 主要实现利用DOM的获取标签对象的功能和对监听功能实现三个功能:(1)开灯,关灯(2)对标签进行全选,反选(3)对文本框聚焦时字母为大写,反之为小写基本实现方法(1)开灯关灯:a.用img标签贴图关灯的…

救园最后7天:「坚持你所相信的,相信你所坚持的」

从7月15日开始的救园还剩最后7天,很有希望,也很紧张,能否救园成功,取决于最后7天有多少园友出手相救。前二十年,我们选择了「坚持我们所相信的」,相信真心为开发者服务,一定会有出路,我们坚持了下来。在第二十年遇到最大难关时,我们选择了「相信我们所坚持的」从7月15…

统计一个字符在字符串里出现的次数

统计一个字符在字符串里出现的次数 背景在数据库操作中,统计字符串中某个特定字符出现的次数是一个常见需求。无论是分析文本数据、格式化字符串,还是确保数据一致性,字符出现次数的统计对于开发人员和数据库管理员来说都是一项重要任务。这个问题看似简单,但可以通过数据库…

React的useId,现在Vue3.5终于也有了!

前言 React在很早之前的版本中加了useId,用于生成唯一ID。在Vue3.5版本中,终于也有了期待已久的useId。这篇文章来带你搞清楚useId有哪些应用场景,以及他是如何实现的。 关注公众号:【前端欧阳】,给自己一个进阶vue的机会 useId的作用 他的作用也是生成唯一ID,同一个Vue应…

Windows 目录统计信息

WinDirStat 是适用于各种版本 Microsoft Windows 的磁盘使用情况统计查看器和清理工具。注意:如果您正在寻找 Linux 的替代品,您正在寻找 KDirStat(在 Debian 衍生产品上为 apt-get install kdirstat 或 apt-get install k4dirstat)或 QDirStat,对于 MacOS X,则为 Disk I…

Cisco Secure Firewall Threat Defense Virtual 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Threat Defense Virtual 7.6.0 - 思科下一代防火墙虚拟设备 (FTDv)Cisco Secure Firewall Threat Defense Virtual 7.6.0 - 思科下一代防火墙虚拟设备 (FTDv) Firepower Threat Defense (FTD) Software for ESXi & KVM 请访问原文链接:https://sysi…

让人眼前一亮的开源项目「GitHub 热点速览」

时隔两周,我又带着让人眼前一亮的开源项目回来了! 告别数据线、蓝牙、WiFi 和网络,只需用手机的摄像头扫描一张动图条形码(需安装应用),就能在设备间传输文件的 libcimbar,一款无需联网和蓝牙的文件传输工具,仅用摄像头传输数据。用 Rust 编写的 PostgreSQL 数据库命令…

Redis系列补充:聊聊布隆过滤器(go语言实践篇)

★ Redis24篇集合 1 介绍 布隆过滤器(Bloom Filter)是 Redis 4.0 版本之后提供的新功能,我们一般将它当做插件加载到 Redis Service服务器中,给 Redis 提供强大的滤重功能。 它是一种概率性数据结构,可用于判断一个元素是否存在于一个集合中。相比较之 Set 集合的去重功能…

伯克利函数调用排行榜(BFCL)

自 2022 年底以来,大语言模型(LLMs)凭借其执行通用任务的强大能力,成为众人关注的焦点。不仅限于聊天应用,将这些模型应用于开发各类 AI 应用和软件(如 Langchain, Llama Index, AutoGPT, Voyager)已成为一种趋势。GPT, Gemini, Llama, Mistral 等模型通过与外部世界的交…

读构建可扩展分布式系统:方法与实践13可扩展的事件驱动处理

可扩展的事件驱动处理1. 可扩展的事件驱动处理 1.1. 使用消息传递系统进行通信,你可以创建松耦合的架构1.1.1. 消息生产者只是将消息存储在队列中,而不用关心消费者如何处理消息1.1.2. 有一个或多个消费者,并且生产者和消费者的集合可以随着时间的推移而改变1.1.3. 有助于提…