SparkContext
是 Apache Spark 的核心类之一,它是 Spark 应用程序的入口点。当想要使用 Spark 的功能时,通常需要首先创建一个 SparkContext
实例。SparkContext
负责连接 Spark 集群,并初始化 Spark 应用程序所需的资源。
SparkContext 的作用
- 集群管理:
SparkContext
负责与 Spark 集群通信,管理集群上的资源分配。 - 任务调度:
SparkContext
调度任务到集群上的各个节点执行,并管理任务的状态。 - 数据读取:通过
SparkContext
可以读取数据并创建 RDD(弹性分布式数据集)。 - 日志记录:
SparkContext
也可以用来设置日志级别,控制日志的输出。
创建 SparkContext
在使用 SparkContext
之前,需要初始化一个 SparkContext
实例。这通常在 Spark 应用程序开始时完成。以下是一个简单的示例:
from pyspark import SparkContext
# 初始化 SparkContext
sc = SparkContext(appName="MyApp")
# 使用 SparkContext 创建 RDD
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)
# 对 RDD 进行操作
result = distData.map(lambda x: x * 2).collect()
# 打印结果
print(result) # 输出: [2, 4, 6, 8, 10]
# 停止 SparkContext
sc.stop()
SparkContext 的主要方法
- parallelize():将本地集合转化为 RDD。
- textFile():从 HDFS、本地文件系统或其他支持的分布式文件系统读取文本文件,并创建 RDD。
- binaryFiles():以二进制形式读取文件系统中的文件,并创建 RDD。
- binaryRecords():从二进制文件中读取固定长度的记录,并创建 RDD。
- wholeTextFiles():从文件系统中读取整个文件作为值,并创建 RDD。
- addFile():将文件添加到 Spark 上下文中,以便在工作节点上访问。
- addPyFile():将 Python 文件添加到 Spark 上下文中,以便在工作节点上执行。
- addJar():将 JAR 文件添加到 Spark 上下文中,以便在工作节点上执行。
- setLogLevel():设置日志级别。
- stop():停止 SparkContext 并释放其使用的资源。
SparkContext 的配置选项
在创建 SparkContext
时,可以传递配置选项来定制 Spark 应用程序的行为。例如,可以指定 Master URL、应用程序名称、日志级别等。
sc = SparkContext(
master="local[*]", # 连接到本地模式(使用所有可用的处理器)
appName="MyApp",
config={
"spark.executor.memory": "2g", # 设置 Executor 内存大小
"spark.cores.max": 4, # 设置最大核心数
}
)
与 SparkSession 的关系
随着 Spark 的发展,SparkSession
成为了更高层次的接口,它封装了 SparkContext
,并且提供了 DataFrame 和 Dataset API 的支持。在新的 Spark 应用程序中,推荐使用 SparkSession
,因为它提供了更多的功能和更好的性能优化。
from pyspark.sql import SparkSession
# 初始化 SparkSession
spark = SparkSession.builder \
.appName("MyApp") \
.getOrCreate()
# 使用 SparkSession 创建 DataFrame
data = [(1, "John"), (2, "Jane")]
columns = ["id", "name"]
df = spark.createDataFrame(data=data, schema=columns)
# 显示 DataFrame
df.show()
# 获取底层的 SparkContext
sc = spark.sparkContext