【SparkSQL】基础入门(重点:SparkSQL和Hive的异同、SparkSQL数据抽象)

【大家好,我是爱干饭的猿,本文重点介绍Spark SQL的定义、特点、发展历史、与hive的区别、数据抽象、SparkSession对象。

后续会继续分享其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】

上一篇文章:《【Spark入门】基础入门》

1. SparkSQL

1.1 什么是SparkSQL

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据
限定: 结构化数据处理

1.2 为什么要学习SparkSQL

SparkSQL是非常成熟的 海量结构化数据处理框架

学习SparkSQL主要在2个点:

  • SparkSQL本身十分优秀, 支持SQL语言\性能强\可以自动优化\API简单\兼容HIVE等等
  • 企业大面积在使用SparkSQL处理业务数据
    • 离线开发
    • 数仓搭建
    • 科学计算
    • 数据分析

1.3 SparkSQL特点

1. 融合性

SQL可以无缝集成在代码中,随时用sQL处理数据

2. 统一数据访问

一套标准API可读写不同数据源

3. Hive兼容

可以使用SparkSQL直接计算并生成Hive数据表

4. 标准化连接

支持标准化JDBC\ODBC连接,方便和各种数据库进行数据交互

1.4 SparkSQL发展历史

在许多年前(2012\2013左右)Hive逐步火热起来, 大片抢占分布式SQL计算市场。

Spark作为通用计算框架, 也不可能放弃这一细分领域,于是, Spark官方模仿Hive推出了Shark框架(Spark 0.9版本) Shark框架是几乎100%模仿Hive, 内部的配置项\优化项等都是直接模仿而来。不同的在于将执行引擎由MapReduce更换为了Spark。

因为Shark框架太模仿Hive, Hive是针对MR优化, 很多地方和SparkCore(RDD)水土不服, 最终被放弃,Spark官方下决心开发一个自己的分布式SQL引擎 也就是诞生了现在的SparkSQL。

在这里插入图片描述
● 2014年 1.0正式发布
● 2015年 1.3 发布DataFrame数据结构, 沿用至今
● 2016年 1.6 发布Dataset数据结构(带泛型的DataFrame), 适用于支持泛型的语言(Java\Scala)
● 2016年 2.0 统一了Dataset 和 DataFrame, 以后只有Dataset了, Python用的DataFrame就是 没有泛型的Dataset
● 2019年 3.0 发布, 性能大幅度提升,SparkSQL变化不大

2. SparkSQL 概述

2.1 SparkSQL和Hive的异同在这里插入图片描述

Hive和Spark均是:“分布式SQL计算引擎”

均是构建大规模结构化数据计算的绝佳利器,同时SparkSQL拥有更好的性能。

目前,企业中使用Hive仍旧居多,但SparkSQL将会在很近的未来替代Hive成为分布式SQL计算市场的顶级

2.2 SparkSQL的数据抽象

在这里插入图片描述
在这里插入图片描述

2.3 SparkSQL数据抽象的发展

从SparkSQL的发展历史可以看到:
• 14年最早的数据抽象是:SchemaRDD(内部存储二维表数据结构的RDD),SchemaRDD就是魔改的RDD,将RDD支持的存储数据,限定
为二维表数据结构用以支持SQL查询。由于是魔改RDD,只是一个过渡产品,现已废弃。
• 15年发布DataFrame对象,基于Pandas的DataFrame(模仿)独立于RDD进行实现,将数据以二维表结构进行存储并支持分布式运行
• 16年发布DataSet对象,在DataFrame之上添加了泛型的支持,用以更好的支持Java和Scala这两个支持泛型的编程语言
• 16年,Spark2.0版本,将DataFrame和DataSet进行合并。其底层均是DataSet对象,但在Python和R语言到用时,显示为DataFrame对象
。和老的DataFrame对象没有区别

2.4 DataFrame数据抽象

在这里插入图片描述
DataFrame和RDD都是:弹性的、分布式的、数据集
只是,DataFrame存储的数据结构“限定”为:二维表结构化数
据,而RDD可以存储的数据则没有任何限制,想处理什么就处理什么
在这里插入图片描述
所以DataFram更适合sql处理

2.5 SparkSession对象

在RDD阶段,程序的执行入口对象是: SparkContext
在Spark 2.0后,推出了SparkSession对象,作为Spark编码的统一入口对象。
SparkSession对象可以:

  • 用于SparkSQL编程作为入口对象
  • 用于SparkCore编程,可以通过SparkSession对象中获取到SparkContext
    所以,我们后续的代码,执行环境入口对象,统一变更为SparkSession对象

在这里插入图片描述
代码演示:

# coding:utf8# SparkSession对象的导包,对象是来自于pyspark.sql包中
from pyspark.sql import SparkSessionif __name__ == '__main__':# 构建SparkSession执行环境入口对象spark = SparkSession.builder.\appName("test").\master("local[*]").\getOrCreate()# 通过SparkSession对象获取SparkContext对象sc = spark.sparkContext# SparkSOL的HelloWorlddf = spark.read.csv("../xian_rent/rent.csv", sep=',', header=True)# 展示表结构df.printSchema()# 注册成零时表,可以通过sql使用df.createTempView("rent_data")# 1. SQL 风格spark.sql("""select * from rent_data where price >= 8000 limit 5""").show()# 2. DSL 风格df.where("price >= 8000").limit(5).show()

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

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

相关文章

RabbitMQ消息模型之Sample

Hello World Hello World是官网给出的第一个模型,使用的交换机类型是直连direct,也是默认的交换机类型。 在上图的模型中,有以下概念: P:生产者,也就是要发送消息的程序C:消费者:消…

考虑极端天气线路脆弱性的配电网分布式电源配置优化模型_IEEE33节点(附带Matlab代码)

随着新能源技术及智能电网的发展,越来越多的分布式电源加入配电网中,不仅改变了配电网结构及供电方式,而且提升了配电网的供电质量。但是在全球气候变暖的背景下,极端天气发生的频率也越来越高,一旦发生必将对配电网系…

九、hdfs中Namenode元数据处理

1、元数据的由来 在hdfs文件系统中,用户的每一次操作,都会对文件系统产生响应的影响,那么谁来记录这些影响呢? 在hdfs文件系统中,edits文件记录了hdfs中的每一次操作,以及本次操作影响的文件其对应的block。…

【Vulnhub 靶场】【Coffee Addicts: 1】【简单-中等】【20210520】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/coffee-addicts-1,699/ 靶场下载:https://download.vulnhub.com/coffeeaddicts/coffeeaddicts.ova 靶场难度:简单 - 中等 发布日期:2021年5月20日 文件大小:1.3 …

【Pytorch】Visualization of Feature Maps(5)——Deep Dream

学习参考来自: PyTorch实现Deep Dreamhttps://github.com/duc0/deep-dream-in-pytorch 文章目录 1 原理2 VGG 模型结构3 完整代码4 输出结果5 消融实验6 torch.norm() 1 原理 其实 Deep Dream大致的原理和【Pytorch】Visualization of Feature Maps(1&…

git-4

1.在GitHub上创建个人仓库 现在仓库中有LICENSE文件,但本地没有这个文件,该怎么办呢?往下看 2.把本地仓库同步到GitHub 3.不同人修改了不同文件如何处理? 两个人在同一个分支上,两个人修改了不同文件 其中一人&…

【上海大学数字逻辑实验报告】二、组合电路(一)

一、 实验目的 熟悉TTL异或门构成逻辑电路的基本方式;熟悉组合电路的分析方法,测试组合逻辑电路的功能;掌握构造半加器和全加器的逻辑测试;学习使用可编程逻辑器件的开发工具 Quartus II设计电路。 二、 实验原理 异或门是数字…

消息中间件——RabbitMQ(六)理解Exchange交换机核心概念!

前言 来了解RabbitMQ一个重要的概念:Exchange交换机 1. Exchange概念 Exchange:接收消息,并根据路由键转发消息所绑定的队列。 蓝色框:客户端发送消息至交换机,通过路由键路由至指定的队列。 黄色框:交换…

Windows 10和11的一个专用的设置菜单,让清理空间变得方便快捷

需要在Windows电脑上释放一些磁盘空间吗?Windows 10和Windows 11都提供了一个专用的设置菜单,使过程更容易。从该菜单中,你可以查看设备上使用了多少空间以及内容类型。 Windows中的“存储”设置还允许你快速清除空间,并启用“存储感知”自动删除临时文件和回收站项目。这…

什么是计算机病毒?

计算机病毒 1. 定义2. 计算机病毒的特点3. 计算机病毒的常见类型和攻击方式4. 如何防御计算机病毒 1. 定义 计算机病毒是计算机程序编制者在计算机程序中插入的破坏计算机功能或者破坏数据,影响计算机使用并且能够自我复制的一组计算机指令或程序代码。因其特点与生…

Verilator 用法

Verilating … 威尔逊-斯奈德版权所有 2003-2023。 … SPDX 许可证标识符: 仅限 LGPL-3.0 或 Artistic-2.0 验证 Verilator 可通过五种主要方式使用: 使用 --cc 或 :vlopt:-sc 选项,Verilator 将分别把设计翻译成 C 或 SystemC 代码。 将设计…

交流负载测试使用场景

交流负载测试是一种在特定环境下,对电力设备、汽车电子部件,工业自动化设备、网络设备、家电产品,航空航天设备以及医疗器械等产品进行测试的方法,该测试的目的是评估这些设备在实际运行条件下的性能和可靠性。 1电力设备测试 交…