Spark中的Application、SparkSession、SparkContext、RDD及其拓展
来源:互联网 发布:开网店最快的软件 编辑:程序博客网 时间:2024/05/16 02:02
接触 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 contextsval sparkConf = new SparkConf().setAppName("SparkSessionZipsExample").setMaster("local")// your handle to SparkContext to access other context like SQLContextval 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 SparkSessionval 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 5val numDS = spark.range(5, 100, 5)// reverse the order and display first 5 itemsnumDS.orderBy(desc("id")).show(5)//compute descriptive stats and display themnumDs.describe().show()// create a DataFrame using spark.createDataFrame from a List or Seqval langPercentDF = spark.createDataFrame(List(("Scala", 35), ("Python", 30), ("R", 15), ("Java", 20)))//rename the columnsval lpDF = langPercentDF.withColumnRenamed("_1", "language").withColumnRenamed("_2", "percent")//order the DataFrame in descending order of percentagelpDF.orderBy(desc("percent")).show(false)
RDD的拓展
上面提到了 Dataset 和 DataFrame,这两者概念是 RDD 的演化版本,图表说明了它们的演进过程和主要区别:
另外 Spark 的设计本身并不支持跨应用共享RDD,想要共享数据可采取以下3种方式:
从外部存取
使用 Global Temporary View
Ignite提供了一个Spark RDD抽象的实现,他可以在内存中跨越多个Spark作业容易地共享状态
相关文章:
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...
- Spark中的Application、SparkSession、SparkContext、RDD及其拓展
- spark学习-SparkSQL--12-SparkSession与SparkContext
- Spark:RDD及其简单操作
- spark中的RDD
- spark中的RDD算子
- Spark中的RDD
- 二 SparkContext-RDD
- Spark之SparkSession
- Spark学习之SparkSession
- spark中的RDD持久化
- Spark编程之基本的RDD算子sparkContext,foreach,foreachPartition, collectAsMap
- spark中的SparkContext实例的textFile使用的小技巧
- spark中的SparkContext实例的textFile使用的小技巧
- spark中的SparkContext的textFile使用的小窍门
- spark中的SparkContext实例的textFile使用的小技巧
- Spark 2.0的SparkSession详解
- spark 之 SparkContext
- 【Spark】SparkContext源码解读
- 线程和进程的区别
- SQL count和case when配合统计给定条件下不重复的记录数
- Dynamic Data——动态数据
- 微信网页授权登录
- Scala练习-桶排序
- Spark中的Application、SparkSession、SparkContext、RDD及其拓展
- (1)命令行基本操作(控制台)操作
- FOR循环求和sum
- jQuery只是工具,原生才是知识
- Activity跳转新方法(学习笔记)
- localStorage、sessionStorage用法总结
- C++ 中箭头操作符(->)与点操作符(.)的区别
- js Number对象
- 为微信小程序搭建https服务,证书申请及配置。Apache服务器。重点描述request:fail ssl hand shake error 错误