文章目录
前言
SparkSession
和SparkContext
都是Spark
计算框架中的核心组件,但它们的作用和使用方式有所不同。下面是详细的区别讲解
1、SparkContext
概述
SparkContext
是 Spark 的核心入口点,主要用于和 Spark 集群交互。它负责创建 RDD、控制 Spark 作业的调度以及与 Spark 集群资源管理器(如 YARN、Mesos 或 Standalone)通信。
作用
- 负责 Spark 任务的调度
- 负责管理 Spark 集群的资源
- 创建 RDD(弹性分布式数据集)
- 与 Spark 执行器(Executor)通信
- 读取外部数据源(如 HDFS、S3、Kafka 等)
- 缓存和持久化数据
如何创建 SparkContext
在早期的 Spark 版本(2.0 之前),需要手动创建 SparkContext:
import org.apache.spark.{SparkConf, SparkContext}
// 创建 SparkConf
val conf = new SparkConf().setAppName("MyApp").setMaster("local[*]")
// 创建 SparkContext
val sc = new SparkContext(conf)
// 使用 SparkContext 创建 RDD
val rdd = sc.parallelize(Seq(1, 2, 3, 4, 5))
println(rdd.collect().mkString(", "))
// 关闭 SparkContext
sc.stop()
关键方法
方法 | 作用 |
---|---|
parallelize() | 将本地集合转换为 RDD |
textFile() | 读取文本文件为 RDD |
wholeTextFiles() | 读取整个目录下的文本文件 |
broadcast() | 创建广播变量 |
accumulator() | 创建累加器 |
stop() | 关闭 SparkContext |
2、SparkSession
概述
SparkSession
是 Spark 2.0 引入的新特性,它统一了SQLContext
、HiveContext
和SparkContext
的功能,成为 Spark 应用的唯一入口点。SparkSession
既可以操作 RDD,也可以执行 DataFrame 和 SQL 相关的操作。
作用
- 统一 SparkContext、SQLContext 和 HiveContext
- 处理 DataFrame 和 Dataset API
- 执行 SQL 查询
- 处理流式计算(Structured Streaming)
- 读取和写入各种数据格式(Parquet、JSON、CSV 等)
- 访问 Spark 配置和 Hive Metastore
如何创建 SparkSession
从 Spark 2.0 开始,推荐使用 SparkSession
作为入口,而不是 SparkContext
:
import org.apache.spark.sql.SparkSession
// 创建 SparkSession
val spark = SparkSession.builder()
.appName("MySparkApp")
.master("local[*]")
.getOrCreate()
// 通过 SparkSession 获取 SparkContext
val sc = spark.sparkContext
// 使用 SparkSession 创建 DataFrame
import spark.implicits._
val df = Seq((1, "Alice"), (2, "Bob")).toDF("id", "name")
df.show()
// 关闭 SparkSession
spark.stop()
关键方法
方法 | 作用 |
---|---|
read.json(“path”) | 读取 JSON 文件并转换为 DataFrame |
read.parquet(“path”) | 读取 Parquet 文件 |
sql(“SELECT * FROM table”) | 运行 SQL 查询 |
createDataFrame(RDD, Schema) | 将 RDD 转换为 DataFrame |
stop() | 关闭 SparkSession |
3. SparkContext vs SparkSession
对比项 | SparkContext | SparkSession |
---|---|---|
引入版本 | Spark 1.x | Spark 2.0 及以后 |
作用 | 主要用于创建 RDD,管理 Spark 任务和资源 | 统一了 Spark 计算的所有入口,包括 RDD、DataFrame、Dataset 和 SQL |
支持 API | 仅支持 RDD | 支持 RDD、DataFrame、Dataset 和 SQL |
数据操作 | 只能使用 RDD API | 既能操作 RDD 也能操作 DataFrame 和 Dataset |
SQL 支持 | 需要 SQLContext 或 HiveContext | 内置 SQL 处理能力 |
推荐使用 | Spark 1.x 版本中使用 | Spark 2.x 及以后版本推荐使用 |
最佳实践:
- 在 Spark 2.0 及以上版本中,始终使用
SparkSession
,而不要直接使用SparkContext
,因为SparkSession
兼容所有 SparkContext 的功能
,并且提供更高级的数据处理能力。
总结
- Spark 2.0 以后,
SparkSession
取代了SparkContext
,是更强大、更推荐的选择。你可以通过SparkSession.sparkContext
获取SparkContext
,但一般不需要直接使用SparkContext
。
如果此篇文章有帮助到您, 希望打大佬们能
关注
、点赞
、收藏
、评论
支持一波,非常感谢大家!
如果有不对的地方请指正!!!