在了解 DataFrame 的強大之後,我們終於要讓 PySpark 處理真實世界的資料了!在企業的大數據專案中,資料來源五花八門,最常見的莫過於傳統的 CSV 報表、Web API 常用的 JSON 格式,以及在大數據生態系中佔有統治地位的 Parquet。今天這篇文章,我們將實作這三種格式的讀取與寫出,並解析為什麼大數據工程師都獨鍾 Parquet!
1. 傳統辦公室的最愛:CSV 格式
CSV (Comma-Separated Values) 是最平易近人的格式,幾乎所有的試算表軟體都能打開它。但在分散式運算中,CSV 有兩個致命傷:第一,它沒有自帶嚴謹的型態定義 (Schema),Spark 必須多花時間掃描推斷;第二,它讀取與切割的速度較慢。
✏️ PySpark 讀寫 CSV 實作:
# 讀取 CSV 檔案
# header=True 代表第一列是欄位名稱
# inferSchema=True 讓 Spark 自動推斷是數字還是字串 (會稍微拖慢讀取速度)
df_csv = spark.read.csv("data/sales.csv", header=True, inferSchema=True)
df_csv.show(5)
# 將 DataFrame 寫出為 CSV 檔案
# mode("overwrite") 代表如果檔案已存在則覆蓋
df_csv.write.mode("overwrite").csv("output/sales_backup.csv", header=True)
2. 靈活的樹狀結構:JSON 格式
JSON 在網頁前後端與 NoSQL 資料庫中極度普及,它允許資料呈現巢狀 (Nested) 結構。PySpark 能輕鬆攤平這些資料,非常適合用來分析系統伺服器的 Log 日誌。
✏️ PySpark 讀寫 JSON 實作:
# 讀取 JSON 檔案 (Spark 處理 JSON 行格式特別在行)
df_json = spark.read.json("data/server_logs.json")
df_json.printSchema()
# 寫出為 JSON 格式
df_json.write.mode("overwrite").json("output/clean_logs.json")
3. 大數據的王者:Parquet 格式
這可能是資管系碩士班同學進入大數據領域後,最需要深刻理解的格式。Parquet 是一種「欄導向 (Columnar Storage)」的開源檔案格式,擁有極高的壓縮率與驚人的查詢效能。
當我們只想計算全校學生的「平均成績」時,Parquet 格式允許 Spark 直接跳過學號、姓名等無關欄位,唯讀取成績那一個欄位。這在大數據運算中被稱為「Projection Pushdown」,能省下海量的 I/O 讀取時間!
✏️ PySpark 讀寫 Parquet 實作:
# 讀取 Parquet 檔案 (速度極快,且內建 Schema)
df_parquet = spark.read.parquet("data/transactions.parquet")
df_parquet.show(3)
# 養成好習慣:處理完巨量資料後,存成 Parquet 格式
df.write.mode("overwrite").parquet("output/processed_data.parquet")
4. 準備就緒:邁向資料清洗
學會如何把不同格式的資料載入 PySpark 後,我們已經裝填好彈藥了。但在進行高階分析前,原始資料中往往充滿了不需要的欄位與雜訊。下一篇文章,我們將學習如何精準選取 (Select) 與過濾 (Filter) 出我們想要的關鍵資料!

沒有留言:
張貼留言