SparkSQL 初体验_命令式案例 | 学习笔记

简介: 快速学习 SparkSQL 初体验_命令式案例

开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段SparkSQL 初体验_命令式案例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/690/detail/12036


SparkSQL 初体验_命令式案例

 

命令式案例

接下来进行 spark SQL 的初体验。在初体验部分,要先明确 spark SQL 怎么去用。

大致分为两种用法,第一种,使用其命令式的 API,来进行相应的代码编写,第二个部分,使用声明式的这个 API,进行接口的编写。我们在命令式的 API 部分,要和 RDD做一个简单的对比,先去写一个 RDD 案例,RDD 案例完成以后,去编写一个 spark SQL 的案例。

两个案例一起说,这样会更容易去对比出来 RDD 区别,接下来进入到笔记当中,这两个案例,编写起来比较的简单,这部分我们就简单去说一个 wordcount 怎么写。

1、RDD 案例:

val config = new SparkConf ( ) .setAppName( "ip_ana" ) . setMaster ( "local[6]")

val sc = new SparkContext( config)

sc.textFile("hdfs ://node01:8020/dataset/wordcount.txt").

flatMap(_.split(”“))

map ( (_, 1))

reduceByKey ( : )

collect

进入到 IDEA 中,先打开 pom 文件,在 pom 文件中复制一下 spark core 一个加包的声明,然后拷贝出来一个新的,先把 spark 包导过来,把 core 改成 sql ,等待它缓慢的编译或读取,直接在 spark 的包下创建一个 sql,在 sql 中创建一个新的文件,命名为叫做 Intro ,就是入门的一个意思。

接下来,我们一同编写两个测试方法,第一个测试方法,叫做 RDD Intro,第二个就叫做 spark SQL 命令式 API Intro,然后 def ds Intro,我们这个两个测试方法创建好了,以后再去编写 RDD,首先第一步创建出来,第二步对数据进行处理,第三步获取则直接进行,首先,我们去创建一个 conf 对象出来。

大家注意到缺点这个 API,要去创建一个 conf有点繁琐,接下来,我们设置两个参数,第一个,叫做 master,这个 master 函数当中,我们传入 locate 在本地运行。

@Test

def rddIntro(): unit = {

Valconf=newSparkconf().setwaster("local[6]").setAppName("rdd intro")

val sc = new sparkcontext(conf)

sc.textFile(path="dataset/wordcount.txt")

.flatMap( _.split( regex =”"))

.map( (_, 1) )

.reduceByKey( _ + _)

.collect()_

.foreach( println(_ )  )

}

刚才是针对于每一条具体的数据来进行操作,对于 RDD 不知道这是什么,无论是什么,直接把这个对象去处理,处理好再给他,他把这个整个结果集生成出来,这个过程跟 SQL 有很大的区别。

2、spark SQL 案例

首先把入口 spark context 换成 spark session

@Test

def dsIntro(): unit = {

val spark = new sparksession.Builder()

.appName( name = "ds intro" )

.master( master = "local[6]")

.getorcreate()

import spark.implicits._

valsourceRDD=spark.sparkContext.parallelize(seq(Person("zhangsan",10),Person("lisi",15)

val personDs = sourceRDD.toDs()

val resultDs = personDs.where(condition = 'age > 10 ).where(condition = 'age < 20 )

.select(cols ='name )

.as[string]

resultDs.show()

}

我们来运行一下,这个时候,我们在运行的时候出现了一个错误,这个错误,其实特别经常见到,我们去读一读这个错误,unable to generate an encoder for inner classI,前面没看懂没关系,后面什么叫做 session,他没有办法处理这个内部,你要去剪切这个 plus,剪切到你整个代码的最外面,所以,大家在进行自己编写的时候,要特别注意这一点,我们再去运行一遍。

3、RDD 与 spark SQL 的区别

这时能看到我们的结果已经打印出来了,我们刚才创建了两个对象,一个叫做张三十岁,一个叫做李四15岁,我们查询十到20之间的用户,然后,打印出来的一个例子,这些叫做内容,这一点和我们 RDD 打印出来的内容就有一个非常大的区别,我们和 RDD 之间最大的区别就是,它的结构信息,有他这一列的列名,并且,我们也知道这一切是一个 string,Sparks SQL 它在进行操作的时候,是会有结构信息存在。

我们这种操作方式里面,是可以直接拿到这个 person 对象当中的某一列来进行操作。

直接按照一个对象当中的某一列来进行查询。这是和 RDD 最大的区别,除了这种方式以外,也有其他方式,比如说我直接拿到一个item来进行相应的这个转换操作,也可以的,这是我们的这一部分的内容。

4、SparkSession

SparkContext 作为 RDD 的创建者和入口,其主要作用有如下两点:

·创建 RDD,主要是通过读取文件创建 RDD

·监控和调度任务,包含了一系列组件,例如 DAGScheduler, TaskSheduler

为什么无法使用SparkContext作为SparksQL 的入口?

.SparkContext 在读取文件的时候,是不包含Schema信息的,因为读取出来的是  RDD。

SparkContext 在整合数据源如 Cassandra,SsON, Parquet 等的时候是不灵活的,而DataFrame 和 Dataset 一开始的设计目标就是要支持更多的数据源

. SparkContext 的调度方式是直接调度 RDD,但是一般情况下针对结构化数据的访问,会先通过优化器优化一下

所以 SparkContext 确实已经不适合作为 SparkSQL 的入口,所以刚开始的时候 Spark 团队为 SparkSQL 设计了两个入口点

一个是 SQLContext 对应 Spark 标准的 SQL 执行,另外一个是 HiveContext 对应 HiveSQL 的执行和 Hive 的支持。

在 Spark 2.0的时候,为了解决入口点不统一的问题,创建了一个新的入口点 SparkSession,作为整个 Spark 生态工具的统一入口点,包括了 SQLContext, HiveContext,SparkContext 等组件的功能

新的入口应该有什么特性?

能够整合 sQLContext , HiveContext ,SparkContext ,

StreamingContext 等不同的入口点·为了支持更多的数据源,应该完善读取和写入体系

·同时对于原来的入口点也不能放弃,要向下兼容。

相关文章
|
算法 程序员 调度
python堆(Heapq)
python堆(Heapq)
244 3
|
移动开发 前端开发 JavaScript
高级前端工程师必备的技能
【7月更文挑战第8天】 **高级前端工程师**精通HTML5/CSS3/JavaScript,擅长React、Vue等框架,掌握性能优化、代码质量保证,能设计可扩展架构,处理前端安全,熟悉跨平台开发,持续学习新技术并领导团队,是技术与管理的结合体。他们对提升用户体验和推动技术创新起关键作用。
1405 12
|
数据采集 存储 监控
数据治理怎么做才是价值最大化的呢?
在数据驱动时代,数据成为企业的核心资产,其治理直接影响决策效率、创新能力和市场竞争力。数据治理是一项系统工程,涵盖策略、流程和技术,确保数据准确、一致、安全、可访问且合规,从而最大化价值。为实现这一目标,企业需明确治理战略、建立治理架构、制定质量标准、强化安全保护、推动数据文化,并持续优化与创新。这些综合措施将充分释放数据潜力,推动企业发展。
|
传感器 编解码 监控
线程池有哪些拒绝策略?
本文介绍了Java线程池的四种拒绝策略:AbortPolicy(默认策略,抛出异常)、CallerRunsPolicy(调用者运行任务)、DiscardPolicy(丢弃任务,不抛异常)和DiscardOldestPolicy(丢弃最旧任务,尝试提交当前任务)。每种策略都有其适用的业务场景,并通过代码示例进行了说明。选择合适的策略取决于具体的应用需求和对任务处理的优先级。
960 0
|
SQL 存储 关系型数据库
MySQL - Explain详解
MySQL - Explain详解
283 0
|
存储 JSON 安全
解密Web安全:Session、Cookie和Token的不解之谜
解密Web安全:Session、Cookie和Token的不解之谜
899 0
|
机器学习/深度学习 人工智能 自然语言处理
华为在手机上,率先实现本地端自然语言搜图功能
华为在手机上,率先实现本地端自然语言搜图功能
658 0
|
存储 前端开发 JavaScript
简析Web3 架构:前端、后端和数据
当谈论 Web 3.0 架构时,通常指的是 DApps,它代表去中心化应用程序。从发展历史来看,Web 2.0 架构由最熟悉的组件组成:
2656 0
简析Web3 架构:前端、后端和数据
|
Linux 开发工具 C语言
【Linux系统编程】项目自动化构建工具make/Makefile--1
【Linux系统编程】项目自动化构建工具make/Makefile--1
|
存储 前端开发 对象存储
带你读《存储漫谈:Ceph原理与实践》——3.2.2 RGW 架构
带你读《存储漫谈:Ceph原理与实践》——3.2.2 RGW 架构