SparkSession 和 SparkContext 的区别【详细】

前言

  • SparkSessionSparkContext 都是 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

概述

  • SparkSessionSpark 2.0 引入的新特性,它统一了 SQLContextHiveContextSparkContext 的功能,成为 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

对比项SparkContextSparkSession
引入版本Spark 1.xSpark 2.0 及以后
作用主要用于创建 RDD,管理 Spark 任务和资源统一了 Spark 计算的所有入口,包括 RDD、DataFrame、Dataset 和 SQL
支持 API仅支持 RDD支持 RDD、DataFrame、Dataset 和 SQL
数据操作只能使用 RDD API既能操作 RDD 也能操作 DataFrame 和 Dataset
SQL 支持需要 SQLContextHiveContext内置 SQL 处理能力
推荐使用Spark 1.x 版本中使用Spark 2.x 及以后版本推荐使用

最佳实践:

  • 在 Spark 2.0 及以上版本中,始终使用 SparkSession,而不要直接使用 SparkContext,因为 SparkSession 兼容所有 SparkContext 的功能,并且提供更高级的数据处理能力。

总结

  • Spark 2.0 以后,SparkSession 取代了 SparkContext,是更强大、更推荐的选择。你可以通过 SparkSession.sparkContext 获取 SparkContext,但一般不需要直接使用 SparkContext

如果此篇文章有帮助到您, 希望打大佬们能关注点赞收藏评论支持一波,非常感谢大家!
如果有不对的地方请指正!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lfwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值