Spark Core
Spark Core 是 Spark 的核心组件,提供分布式任务调度和基本的数据抽象。
概述
Spark Core 提供了 Spark 的基本功能,包括:
- RDD: 弹性分布式数据集
- 任务调度: DAG 调度引擎
- 内存管理: 高效的内存使用
RDD 操作
创建 RDD
python
from pyspark import SparkContext
sc = SparkContext("local", "SparkCoreExample")
# 从列表创建
data = [1, 2, 3, 4, 5]
rdd = sc.parallelize(data)
# 从文件创建
rdd = sc.textFile("data.txt")转换操作
python
# map: 对每个元素应用函数
squared_rdd = rdd.map(lambda x: x * x)
# filter: 过滤元素
filtered_rdd = rdd.filter(lambda x: x > 10)
# flatMap: 扁平化映射
words_rdd = lines_rdd.flatMap(lambda line: line.split(" "))
# reduceByKey: 按键聚合
counts_rdd = pairs_rdd.reduceByKey(lambda a, b: a + b)行动操作
python
# collect: 返回所有元素
result = rdd.collect()
# count: 返回元素数量
count = rdd.count()
# reduce: 聚合元素
sum = rdd.reduce(lambda a, b: a + b)
# take: 返回前 n 个元素
top5 = rdd.take(5)
# saveAsTextFile: 保存到文件
rdd.saveAsTextFile("output")持久化
python
# 缓存到内存
rdd.cache()
# 缓存到磁盘
rdd.persist(pyspark.StorageLevel.DISK_ONLY)
# 缓存到内存和磁盘
rdd.persist(pyspark.StorageLevel.MEMORY_AND_DISK)分区
分区策略
python
# 指定分区数
rdd = sc.parallelize(data, numSlices=10)
# 重新分区
rdd = rdd.repartition(20)
# 合并分区
rdd = rdd.coalesce(5)依赖关系
窄依赖
窄依赖是指每个父 RDD 的分区最多被一个子 RDD 的分区使用:
- map
- filter
- union
宽依赖
宽依赖是指父 RDD 的分区被多个子 RDD 的分区使用:
- groupByKey
- reduceByKey
- join
容错机制
Spark 使用 Lineage 来实现容错:
- 记录 RDD 的创建过程
- 当某个分区丢失时,重新计算该分区
- 不需要 checkpoint 也能恢复数据