Spark SQL

Spark SQL是为了解决大数据时代的半结构化和非结构化数据分析问题,提供了一种将SQL转换为Spark程序的解决方案。DataFrame作为Spark SQL的核心数据抽象,允许执行关系型操作并用于机器学习算法。从RDD转换为DataFrame可以通过反射机制或编程方式实现,而Spark SQL还支持读写外部数据库如MySQL,提供交互式查询体验。
摘要由CSDN通过智能技术生成

Spark SQL简介

在Hadoop体系中,有Hive可以帮助我们将SQL转换为MR程序,Hive的基本架构如下:

在这里插入图片描述
Hive的工作流程为
在这里插入图片描述

因此,我们说Hive在Hadoop体系中扮演的是“编程”的角色,它本身并没有存储数据。
同样的,在我们使用Spark时,也很自然的会有这样的需求——通过编写SQL获取结果,避免重复的编写大量Spark程序代码。
在初期是,Shark就是扮演这样的角色,因此也被称为“Hive on Spark”。甚至Shark的整体架构和Hive都是类似的,区别是Hive将SQL转换为MR程序,Shark将SQL转换为Spark程序。
在这里插入图片描述
由于Shark是照搬的Hive,不方便针对Spark添加新的优化策略。并且Spark是线程级运行,而MapReduce是进程级别运行。因此Spark在兼容Hive时存在线程安全问题。因此Shark在实现Spark版的Hive时,专门做的实现。之后Shark团队就转而开发了Spark SQL。
在Spark SQL中,除了原来的“将SQL转换为抽象语法树”这一模块是照搬原来的模块,其他的模块全部是针对Spark新开发的。
在这里插入图片描述

Spark SQL的宗旨

一、在大数据时代,90%的数据都是半结构化或非架构化数据,无法利用传统的关系型数据库如Mysql去分析这些数据,Spark SQL就是为了解决这样的问题,它可以分析非结构化、半结构化和结构化数据。
二、关系型数据库仅支持综合性查询分析,如汇总、求和,但是今天,我们需要对数据执行更高级的分析,如使用机器学习算法进行决策分析、图像处理等,这是传统的关系型数据库不支持的。
在这里插入图片描述

在Spark Core中的数据抽象是RDD,而在Spark SQL中的数据抽象是DataFrame,是一种带有Schema的RDD,类似关系型表哥,可以进行相关查询。并且DataFrame是机器学习算法中通用的数据类型,可以非常方便的调用机器学习算法库。
在这里插入图片描述

DataFrame概述

在这里插入图片描述
DataFrame是Spark SQL的数据抽象,我们使用Spark SQL,就是对DataFrame进行各种操作,就好比我们在Spark Core中操作RDD。
RDD和DataFrame的区别:
在这里插入图片描述

DataFrame的创建

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

    val sparkSession = SparkSession.builder().getOrCreate()

    val df = sparkSession.read.json("file:///...")
    df.show(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值