Skip to content

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 也能恢复数据