Spark中的Application、SparkSession、SparkContext、RDD及其拓展

接触 Spark 的时候容易产生这样的疑惑,RDD 是什么,SparkContext 是什么,SparkSession 又是什么... 它们之间又是什么关系?

简介

先来个简单的一图流:
图片描述

再来个粗暴的一句话描述:
Application:用户编写的Spark应用程序,Driver 即运行上述 Application 的 main() 函数并且创建 SparkContext。
SparkContext:整个应用的上下文,控制应用的生命周期。
RDD:不可变的数据集合,可由 SparkContext 创建,是 Spark 的基本计算单元。

SparkSession

可以由上节图中看出,Application、SparkSession、SparkContext、RDD之间具有包含关系,并且前三者是1对1的关系。

SparkSession 是 Spark 2.0 版本引入的新入口,在这之前,创建一个 Application 对应的上下文是这样的:

//set up the spark configuration and create contexts
val sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local")
// your handle to SparkContext to access other context like SQLContext
val sc = new SparkContext(sparkConf).set("spark.some.config.option", "some-value")
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

现在 SparkConf、SparkContext 和 SQLContext 都已经被封装在 SparkSession 当中,并且可以通过 builder 的方式创建:

// Create a SparkSession. No need to create SparkContext
// You automatically get it as part of the SparkSession
val warehouseLocation = "file:${system:user.dir}/spark-warehouse"
val spark = SparkSession
   .builder()
   .appName("SparkSessionZipsExample")
   .config("spark.sql.warehouse.dir", warehouseLocation)
   .enableHiveSupport()
   .getOrCreate()

通过 SparkSession 创建并操作 Dataset 和 DataFrame,代码中的 spark 对象既是 SparkSession

//create a Dataset using spark.range starting from 5 to 100, with increments of 5
val numDS = spark.range(5, 100, 5)
// reverse the order and display first 5 items
numDS.orderBy(desc("id")).show(5)
//compute descriptive stats and display them
numDs.describe().show()
// create a DataFrame using spark.createDataFrame from a List or Seq
val langPercentDF = spark.createDataFrame(List(("Scala", 35), ("Python", 30), ("R", 15), ("Java", 20)))
//rename the columns
val lpDF = langPercentDF.withColumnRenamed("_1", "language").withColumnRenamed("_2", "percent")
//order the DataFrame in descending order of percentage
lpDF.orderBy(desc("percent")).show(false)

RDD的拓展

上面提到了 Dataset 和 DataFrame,这两者概念是 RDD 的演化版本,图表说明了它们的演进过程和主要区别:

clipboard.png

另外 Spark 的设计本身并不支持跨应用共享RDD,想要共享数据可采取以下3种方式:


相关文章:
https://databricks.com/blog/2...
http://www.jianshu.com/p/552b...
https://spark.apache.org/docs...
https://spark.apache.org/docs...
https://apacheignite-fs.readm...
http://www.jianshu.com/p/c018...
https://stackoverflow.com/que...
https://juejin.im/entry/58591...
https://github.com/AgilData/s...


Piece of Thoughts
Piece of my thoughts
95 声望
4 粉丝
0 条评论
推荐阅读
详解Redisson分布式限流的实现原理
  我们目前在工作中遇到一个性能问题,我们有个定时任务需要处理大量的数据,为了提升吞吐量,所以部署了很多台机器,但这个任务在运行前需要从别的服务那拉取大量的数据,随着数据量的增大,如果同时...

xindoo3阅读 863

封面图
百度工程师浅谈分布式日志
导读 我们做软件开发时,或多或少的会记录日志。由于日志不是系统的核心功能,常常被忽视,定位问题的时候才想起它。本文由浅入深的探讨不起眼的日志是否重要,以及分布式架构下的日志运维工具应该具备哪些能力,...

百度Geek说3阅读 344

HTAP 数据库如何实现?浅析开务数据库中的列存引擎
TP 与 AP 融合的 HTAP 数据库正成为业内的发展趋势。但由于大规模数据场景下 TP 与 AP 系统本身的复杂性,要在一套数据库系统中融合两种使用场景的功能并不容易。浪潮推出的 HTAP 开务数据库采用多模存储引擎的方...

KaiwuDB阅读 2.6k

封面图
基于Seata探寻分布式事务的实现方案
随着业务的快速发展、业务复杂度越来越高,几乎每个公司的系统都会从单体走向分布式,特别是转向微服务架构。随之而来就必然遇到分布式事务这个难题,这篇文章通过seata框架总结了分布式事务的几种解决方案

京东云开发者2阅读 499

封面图
vivo 超大规模消息中间件实践之路
作者:vivo 互联网存储技术团队-Luo Mingbo、中间件团队- Liu Runyun本文根据“2022 vivo开发者大会"现场演讲内容整理而成。

vivo互联网技术2阅读 477

雪花算法
1.第一位 占用1bit,其值始终是0,没有实际作用。2.时间戳 占用41bit,精确到毫秒,总共可以容纳约69年的时间。 3.工作机器id 占用10bit,做多可以容纳1024个节点。 4.序列号 占用12bit,每个节点每毫秒0开始不断...

小强Zzz1阅读 571

KaiwuDB 分布式数据库-介绍
KaiwuDB 是浪潮打造的一款分布式数据库产品,具备强一致、高可用分布式架构、分布式水平扩展、高性能、企业级安全等特性,自研的原生分布式存储引擎支持完整 ACID,支持 PostgreSQL 协议访问。同时提供自动化运维...

KaiwuDB阅读 1.9k

封面图
95 声望
4 粉丝
宣传栏