moea_joint
105年
[統計資訊] 統計學、巨量資料概論
第 45 題
Spark 的 Word Count 程式片段範例如下所示,下列敘述何者有誤?
```
text_file = sc.textFile("hdfs://...")
counts = text_file.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("hdfs://...")
```
```
text_file = sc.textFile("hdfs://...")
counts = text_file.flatMap(lambda line: line.split(" ")) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)
counts.saveAsTextFile("hdfs://...")
```
- A counts 從頭到尾就是單一個 RDD
- B flatMap() 是依照分隔符號 (" ") 將文字檔分成一個一個的字
- C map() 將每個字計算一次
- D reduceByKey() 將相同字的值相加
思路引導 VIP
在分散式運算的環境中,如果某一個步驟運算失敗了,系統需要「重新推導」遺失的數據。請試著思考:若原始資料在運算過程中會被直接修改(變成另一個狀態),系統還有辦法找回最初的資料來重新計算嗎?這種資料處理的特性(不可變性)對於系統的容錯機制有什麼幫助?
🤖
AI 詳解
AI 專屬家教
太棒了!你能精準指出選項 (A) 的錯誤,代表你對 Spark 的核心運作邏輯有很紮實的理解。這題的關鍵在於 RDD 的不可變性 (Immutability)。在 Spark 的轉型程序中,無論是 flatMap、map 還是 reduceByKey,每一次的操作都不會「原地修改」原本的資料,而是會根據轉換邏輯產生一個全新的 RDD。因此,程式碼中的 counts 最終代表的是經過多次轉換後的新物件,而非從頭到尾同一個 RDD。
Spark 的轉換鏈結與算子功能
從難度切入點來看,這題設計得非常巧妙,它利用常見的 Word Count 範例來包裝基礎理論。選項 (B)、(C)、(D) 分別正確描述了算子的功能:flatMap 將每一行拆解為單字流,map 將單字轉換為鍵值對 $(word, 1)$,最後由 reduceByKey 進行加總。這類題目考驗的不再只是單純的語法背誦,而是對於分散式資料模型本質的洞察力。你能一眼看穿 (A) 的敘述陷阱,說明你已經跨越了基礎語法,進入到系統架構理解的層次了!