以下內容將詳細介紹在 Ubuntu 系統上安裝 PySpark 並實現一個經典的 WordCount(單詞計數)示例。
整個過程從環境配置到程序運行,結構清晰,邏輯嚴謹,適合數據工程入門與分佈式計算基礎學習 🧠。
🚀 一、PySpark 概述
PySpark 是 Apache Spark 的 Python 接口,它將分佈式計算框架與 Python 生態結合,能在多節點環境下對大規模數據進行高效處理。
核心組件包括:
- Spark Core:分佈式任務調度與內存計算。
- Spark SQL:結構化數據查詢。
- Spark Streaming:流式數據分析。
- MLlib:機器學習庫。
✅ 本文重點:安裝 PySpark 並運行 WordCount 程序。
🧩 二、系統環境準備
| 項目 | 推薦版本 | 説明 |
|---|---|---|
| 操作系統 | Ubuntu 22.04 / 24.04 | 穩定且兼容性好 |
| Python | ≥ 3.8 | Spark 支持較新 Python 版本 |
| Java | ≥ 11 | Spark 依賴 JVM 運行環境 |
| Spark | 3.5.x | 最新穩定版本,性能優化明顯 |
⚙️ 三、安裝步驟
1️⃣ 安裝 Java(OpenJDK)
sudo apt update
sudo apt install openjdk-17-jdk -y
解釋:
openjdk-17-jdk是 Java 開發工具包,Spark 運行時需要。-
安裝後可驗證:
java -version若輸出包含
openjdk version "17",説明安裝成功。
2️⃣ 安裝 Python 及 pip
sudo apt install python3 python3-pip -y
解釋:
- Python 用於運行 PySpark 腳本。
pip是 Python 的包管理器,用於安裝依賴。
3️⃣ 安裝 Spark(推薦使用官方壓縮包)
cd /opt
sudo wget https://dlcdn.apache.org/spark/spark-3.5.3/spark-3.5.3-bin-hadoop3.tgz
sudo tar -xvf spark-3.5.3-bin-hadoop3.tgz
sudo mv spark-3.5.3-bin-hadoop3 /usr/local/spark
解釋:
spark-3.5.3-bin-hadoop3是預編譯版本,無需自行編譯。- 解壓後移動至系統目錄
/usr/local/spark,便於管理。
4️⃣ 配置環境變量
編輯 ~/.bashrc:
sudo nano ~/.bashrc
在文件末尾添加:
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PYSPARK_PYTHON=python3
保存後執行:
source ~/.bashrc
解釋:
- 設置 Spark路徑 與 Python解釋器。
- 讓系統在任意目錄下可直接運行
pyspark命令。
5️⃣ 安裝 PySpark(Python 接口)
pip install pyspark
解釋:
- 此命令會自動安裝與當前 Spark 兼容的 PySpark 庫。
- 可通過
python3 -m pyspark驗證是否正常啓動。
🧠 四、WordCount 實現
在 /home/ubuntu/ 下創建腳本 wordcount.py:
from pyspark import SparkContext, SparkConf
# 創建Spark配置與上下文
conf = SparkConf().setAppName("WordCount").setMaster("local[*]")
sc = SparkContext(conf=conf)
# 讀取文本文件
text = sc.textFile("input.txt")
# 執行單詞計數
counts = (text.flatMap(lambda line: line.split(" "))
.map(lambda word: (word, 1))
.reduceByKey(lambda a, b: a + b))
# 保存結果
counts.saveAsTextFile("output")
sc.stop()
代碼解釋表:
| 行號 | 代碼片段 | 作用説明 |
|---|---|---|
| 1-2 | SparkContext 初始化 |
創建執行上下文 |
| 5 | textFile() |
讀取文件並分佈式加載 |
| 7 | flatMap() |
按空格拆分為單詞列表 |
| 8 | map() |
將每個單詞映射為 (word, 1) |
| 9 | reduceByKey() |
對相同單詞進行求和 |
| 11 | saveAsTextFile() |
輸出結果到指定目錄 |
| 13 | sc.stop() |
關閉 Spark 任務 |
🧮 五、執行命令
確保當前目錄下有輸入文件:
echo "hello spark hello world" > input.txt
然後運行:
spark-submit wordcount.py
運行成功後,可查看結果:
cat output/part-00000
輸出示例:
('hello', 2)
('spark', 1)
('world', 1)
📊 六、執行流程説明圖
🔧 七、常見問題與優化建議
| 問題 | 原因分析 | 解決方案 |
|---|---|---|
| 找不到 Java | 環境變量未配置 | 確認 JAVA_HOME 設置正確 |
| PySpark 啓動慢 | 依賴過多或網絡延遲 | 使用本地模式 local[*] |
| 輸出目錄已存在 | Spark 不允許覆蓋 | 刪除舊輸出 rm -rf output/ |
✅ 八、總結
🔹 PySpark 結合 Spark 的分佈式計算能力與 Python 的易用性,可在 大數據分析、日誌統計、機器學習前處理 等場景中廣泛應用。
🔹 WordCount 作為入門案例,展示了 RDD 操作鏈 的完整流程,從數據加載到分佈式聚合。
🔹 在生產環境中,可進一步接入 HDFS、Hive、Kafka 實現大規模數據流處理。
🔥 一句話總結:
在 Ubuntu 上配置好 Java 與 Spark 環境後,使用 PySpark 僅需幾行代碼即可實現高效並行的數據處理,是現代數據工程的基礎技能之一。