Spark RDD 编程入门

一、先搞懂一句话:RDD是什么?

👉 RDD = 分布式数据集合(可以理解成"分布在多台机器上的数据列表") DD是什么?

👉 RDD = 分布式数据集合(可以理解成"分布在多台机器上的数据列表")

你可以把它理解成:

Python里的 list,只不过是"分布式版本"


二、RDD入门三步(最重要)

✅ 第一步:创建RDD

有两种最常见方式:

① 从文件读取(最常用)

python 复制代码
lines = sc.textFile("file:///xxx/word.txt")

👉 说明:

  • 可以读本地文件
  • 也可以读 H### ② 从列表创建
python 复制代码
rdd = sc.parallelize([1,2,3,4,5])

👉 说明:

  • 适合测试、学习用

三、RDD操作核心(一定要记住)

👉 Spark操作分两类:

1️⃣ 转换操作(Transformation)

👉 不会立即执行!

比如:

python 复制代码
rdd.map()
rdd.filter()
rdd.flatMap()

特点:

  • 只是在"记录操作步骤"
  • 不会真的计算 fileciteturn3file0

2️⃣ 行动操作(Action)

👉 才会真正执行计算!

比如:

python 复制代码
rdd.collect()
rdd.count()
rdd.foreach()

👉 一旦调用:

python 复制代码
rdd.map()
rdd.filter()
rdd.flatMap()

特点:

  • 只是在"记录操作步骤"
  • 不会真的计算 fileciteturn3file0

2️⃣ 行动操作(Action)

👉 才会真正执行计算!

比如:

python 复制代码
rdd.collect()
rdd.count()
rdd.foreach()

👉 一旦调用:

👉 Spark才开始真正计算


🎯 一句话总结(非常重要)

没有Action,就不会执行计算! fileciteturn3file0


四、最常用的RDD操作(必须会)

1️⃣ map(最基础)

👉 对每个元素做处理

python 复制代码
rdd.ma:contentReference[oaicite:9]{index=9}:contentReference[oaicite:10]{index=10}:contentReference[oaicite:3]{index=3}## 🎯 一句话总结(非常重要)

> **没有Action,就不会执行计算!** fileciteturn3file0

---

# 四、最常用的RDD操作(必须会)

## 1️⃣ map(最基础)
👉 对每个元素做处理

```python
rdd.map(lambda x: x+1)

2️⃣ filter(筛选)

python 复制代码
rdd.filter(lambda x: x > 3)

3️⃣ flatMap(拆分)

👉 一行变多行(非常重要)

python 复制代码
lines.flatMap(lambda line: line.split(" "))

4️⃣ reduceByKey(最重要)

👉 做统计、聚合

python 复制代码
rdd.reduceByKey(lambda a,b: a+b)

五、经典入门案例(必须掌握)

🎯 词频统计(WordCount)

python 复制代码
lines = sc.textFile("file:///xxx/word.txt")

result = lines \
    .flatMap(lambda line: line.split(" ")) \
    .map(lambda word: (word,1)) \
    .reduceByKey(lambda a,b:a+b)

print(result.collect())

👉 这段代码是 Spark 入门"必考题" fileciteturn3file0


六、RDD运行流程(初学者必须理解)

👉 实际执行过程:

复制代码
读取数据 → 转换 → 转换 → 转换 → 行动操作 → 输出结果

👉 注意:

  • 前面都是"准备"
  • 最后一步才

2️⃣ filter(筛选)

python 复制代码
rdd.filter(lambda x: x > 3)

3️⃣ flatMap(拆分)

👉 一行变多行(非常重要)

python 复制代码
lines.flatMap(lambda line: line.split(" "))

4️⃣ reduceByKey(最重要)

👉 做统计、聚合

python 复制代码
rdd.reduceByKey(lambda a,b: a+b)

五、经典入门案例(必须掌握)

🎯 词频统计(WordCount)

python 复制代码
lines = sc.textFile("file:///xxx/word.txt")

result = lines \
    .flatMap(lambda line: line.split(" ")) \
    .map(lambda word: (word,1)) \
    .reduceByKey(lambda a,b:a+b)

print(result.collect())

👉 这段代码是 Spark 入门"必考题" fileciteturn3file0


六、RDD运行流程(初学者必须理解)

👉 实际执行过程:

复制代码
读取数据 → 转换 → 转换 → 转换 → 行动操作 → 输出结果

👉 注意:

  • 前面都是"准备"
  • 最后一步才"执行"

七、RDD两个重要机制(理解即可)

1️⃣ 惰性机制(Lazy)

👉 不到最后不计算


2️⃣ 持久化(缓存)

👉 避免重复计算

python 复制代码
rdd.cache()

👉 适合:

  • 多次使用同一个RDD

八、分区(简单理解)

👉 RDD会被分成多个"块"并行计算

作用:

  • 提高速度
  • 提高并发

简单理解:

分区越多 → 并行越强(但也不能无限大) fileciteturn3file0


九、数据读写(实用)

1️⃣ 读文件

python 复制代码
sc.textFile("file:///xxx/word.txt")

2️⃣ 写文件

python 复制代码
rdd.saveAsTextFile("file:///xxx/output")

👉 注意:

  • 不是一个文件
  • 是一个目录(多个 part 文件) 是 Spark 入门"必考题" fileciteturn3file0

六、RDD运行流程(初学者必须理解)

👉 实际执行过程:

复制代码
读取数据 → 转换 → 转换 → 转换 → 行动操作 → 输出结果

👉 注意:

  • 前面都是"准备"
  • 最后一步才"执行"

七、RDD两个重要机制(理解即可)

1️⃣ 惰性机制(Lazy)

👉 不到最后不计算


2️⃣ 持久化(缓存)

👉 避免重复计算

python 复制代码
rdd.cache()

👉 适合:

  • 多次使用同一个RDD

八、分区(简单理解)

👉 RDD会被分成多个"块"并行计算

作用:

  • 提高速度
  • 提高并发

简单理解:

分区越多 → 并行越强(但也不能无限大) fileciteturn3file0


九、数据读写(实用)

1️⃣ 读文件

python 复制代码
sc.textFile("file:///xxx/word.txt")

2️⃣ 写文件

python 复制代码
rdd.saveAsTextFile("file:///xxx/output")

👉 注意:

  • 不是一个文件
  • 是一个目录(多个 part 文件) fileciteturn3file0

十、初学者最小必会清单(重点)

如果你只记10件事,就记这个👇

  1. 什么是RDD(分布式数据)

  2. 如何创建RDD(t"Pi is roughly"

    这一步说明:

    • pyspark 适合交互调试
    • spark-submit 适合正式运行程序

    五、第三阶段:安装 PySpark 类库

    这一点初学者很容易混淆:

    • Spark:是计算框架
    • PySpark:是 Python 类库
    • bin/pyspark:是交互式客户端命令,不等于类库

    课件建议在 pyspark 虚拟环境中安装 PySpark:fileciteturn2file0

    bash 复制代码
    conda activate pyspark
    pip install pyspark==3.4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

然后进入 Python 测试:

python 复制代码
import pyspark

不报错就说明安装成功。fileciteturn2file0


六、第四阶段:写一个最简单的 Spark 程序

课件给件给了一个 WordCount.py 示例,核心流程非常适合入门理解:fileciteturn2file0

python 复制代码
from pyspark import SparkConf, SparkContext

conf = SparkConf().setMaster("local[*]").setAppName("My App")
sc = SparkContext(conf = conf)

logFile = "file:///usr/local/spark/README.md"
logData = sc.textFile(logFile, 2).cache()

numAs = logData.filter(lambda line: 'a' n line).count()
numBs = logData.filter(lambda line: 'b' in line).count()

print('Lines with a: %s, Lines with b: %s' % (numAs, numBs))
sc.stop()

你只需要理解这几步:

  1. 创建 Spark 配置
  2. 创建 Spark 上下文
  3. 读取文件
  4. 做转换和统计
  5. 输出结果
  6. 关闭 Spark

运行方式有两种:

方式1:直接用 Python 跑

bash 复制代码
python WordCount.py

方式2:用 Spark 提交

bash 复制代码
/usr/local/sprk/bin/spark-submit --master local[*] WordCount.py

七、第五阶段:再学集群模式(Standalone)

当本地模式已经熟悉以后,再进入集群模式。

课件中使用 3 台机器做演示:

  • hadoop01:Master + Worker
  • hadoop02:Worker
  • hadoop03:Worker

这一步的核心目标是理解:

  • Master:负责调度
  • Worker:负责执行任务fileciteturn2file0

集群搭建核心流程

对于学者,不必一开始记所有细节,只抓住这 6 步6 步:

1. 先搭好 Hadoop 集群

因为 Spark 常要读取 HDFS 数据。fileciteturn2file0

2. 所有节点准备 Python 环境

建议所有节点都装好 Anaconda3,并激活 pyspark 环境。fileciteturn2file0

3. 所有节点配置环境变量

保证每个节点都知道:

  • Java 在哪
  • Hadoop 在哪
  • Spark 在哪
  • Python 在哪fileciteturn2file0

4. 配置 workers

在 Master 节点的 conf/workers 里写入所有 Worker 主机名:fileciteturn2file0

bash 复制代码
hadoop01
hadoop02
hadoop03

5. 配置 spark-env.sh

设置:

  • Master 主机名
  • 端口
  • Worker 资源
  • Hadoop 配置位置
  • 历史日志配置fileciteturn2file0

6. 启动集群

先启动 Hadoop,再启动 Spark:fileciteturn2file0

bash 复制代码
cd /usr/local/hadoop
sbin/start-all.sh

cd /usr/local/spark
./sbin/start-history-server.sh
sbin/start-master.sh
sbin/start-workers.sh

启动后可以在浏览器查看集群页面。课件中 Master 管理页面示例地址为:

bash 复制代码
http://hadoop01:8081

八、第六阶段:了解 Spark on YARN

这个模式更接近企业环境。课件里强调:

  • 企业往往已经有 Hadoop/YARN 集群
  • 所以 Spark 很多时候直接跑在 YARN 上
  • 不一定单独搭 Standalone 集alone 集群fileciteturn2file0

Spark on YARN 的入门理解

你只要先记住:

它的前提

  • 已经有 Hadoop/YARN 集群
  • 有 Spark 客户端工具
  • 有待提交程序fileciteturn2file0

它的好处

  • 资源统一管理
  • 更适合企业生产环境

它的两种模式

  • client:适合学习和测试
  • cluster:适合生产环境fileciteturn2file0

最简单测试命令

启动 pyspark

bash 复制代码
cd /usr/local/spark
./bin/pyspark --master yarn

提交程序

bash 复制代码
cd /usr/local/spark
bin/spark-submit \
--master yarn \
/usr/local/spark/examples/src/main/python/pi.py 10 2>&1 | grep "Pi is roughly"

九、给初学者的推荐学习路线

第1周

先完成本地环境安装:

  • JDK
  • Hadoop 环境变量
  • Spark 安装
  • pyspark 启动
  • SparkPi 验证

第2周

练会两个命令:

  • pyspark
  • spark-submit

并写一个最简单的 WordCount.py

第3周

学习读取:

  • 本地文件
  • HDFS 文件

第4周

再去理解:

  • Standalone 集群
  • Spark on YARN
  • client / cluster 区别

十、初学者最容易踩的坑

1. 环境变量没配全

尤其是:

  • JAVA_HOME
  • SPARK_HOME
  • HADOOP_HOME
  • HADOOP_CONF_DIR
  • PYSPARK_PYTHON

2. 把 PySpark 类库和 pyspark 命令混为一谈

它们不是一回事。fileciteturn2file0

3. 一上来就搭集群

初学者最好的策略是:

先本地跑通,再学分布式

4. 日志太多,看不到结果

可以用 grep 过滤,比如:

bash 复制代码
2>&1 | grep "Pi is roughly"

十一、最简版流程图

准备 JDK/Hadoop/Python → 下载并解压 Spark → 配置 spark-env.sh 和 .bashrc → source 生效 → 跑 SparkPi 验证 → 用 pyspark 交互测试 → 用 spark-submit 提交程序 → 再学习集群模式和 YARN 模式

相关推荐
小陈工2 小时前
ModelEngine智能体开发实战:知识库自动生成与多Agent协作
大数据·网络·数据库·人工智能·python·django·异步
一叶飘零_sweeeet2 小时前
分布式协调双雄深度拆解:ZooKeeper 与 Nacos 从底层原理到生产实战全指南
分布式·zookeeper·nacos
llilian_164 小时前
IRIG-B码产生器立足用户痛点,提供精准授时解决方案
大数据·数据库·功能测试·单片机·嵌入式硬件·测试工具
Elastic 中国社区官方博客11 小时前
快速 vs. 准确:衡量量化向量搜索的召回率
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
qq_3813385011 小时前
【技术日报】2026-03-18 AI 领域重磅速递
大数据·人工智能
电商API&Tina15 小时前
【电商API接口】开发者一站式电商API接入说明
大数据·数据库·人工智能·云计算·json
zxsz_com_cn15 小时前
设备预测性维护方案设计方向,如何设计设备预测性维护方案
分布式
武子康17 小时前
大数据-253 离线数仓 - Airflow 入门与任务调度实战:DAG、Operator、Executor 部署排错指南
大数据·后端·apache hive
guoji778818 小时前
2026年Gemini 3 Pro vs 豆包2.0深度评测:海外顶流与国产黑马谁更强?
大数据·人工智能·架构