紀錄 2015/6-7 月間,在 edx 上 Introduction to Big Data with Spark 的上課心得紀錄。(竟然拖了一年才整理到 blog 上… XD)
這堂課著重在 Data Processing 部分,特別是熟悉 map reduce 技能。除了看錄影之外,精華其實在 lab 實作,透過作業走過 Big data 的重要流程。
lab 0: Spark 用法簡介
- 這課 Spark 是用 Python API 而不是 Scala。
- Spark 操作資料 = transform + action
- 介紹 map reduce 的方式,需要注意不可以中途 collect,不然就開始跑了
lab 1: Word counting
最基本 Map reduce 操作。這應該算是 Big Data 界的 Hello World 程式(?)。
lab 2: Apache Log 分析
繼續加強 Map reduce 操作。
lab 3: Entity Resolution
這 lab 是這堂課中是最難的作業,花了不少時間。題目是 Entity Resolution,給你兩份大文件集比對出重複的資料 (實務應用例如連結商店A和商店B的資料,但沒有共通的ID,商品名稱和描述也不盡相同)
首先將所有文字拆成 tokens,用 TF-TDF 方法來計算每個 token 對每一份文件中的重要程度。這子題卡有點久,公式其實也沒有很難,TF 是「token 出現次數/總tokens數」、IDF 則是「總文件數/包含該token的文件數」,除了作業本身的提示有點故意誤導之外(?),就是我還是太習慣 procedured 的寫法了,腦袋需要換成 map reduce 平行運算模式(transform->transform->transform->action) 和善用 pair RDD,真的是要常練習才寫的快。
每份文件的每個 tokens 都有了 TF-TDF 權重,接著用 Cosine similarity 算出任兩份文件的相似程度,然後加 Inverted index 改善效能,最後用 Precision 和 Recall 算出 F-measure 並用 matplotlib 畫圖得出最好的 threshold 值。相似程度超過這個 threshold 值的就表示判斷成重複的資料。
看來「資料工程師」就是在做這樣的事情(?)
- Entity Resolution: en.wikipedia.org/wiki/Record_linkage
- TF-IDF: zh.wikipedia.org/wiki/TF-IDF
- Cosine similarity: en.wikipedia.org/wiki/Cosine_similarity
- Inverted index: en.wikipedia.org/wiki/Inverted_index
- Precision and recall: en.wikipedia.org/wiki/Precisionandrecall
lab 4: Machine Learning
使用者的電影評分預測。這次作業比較簡單,感覺就只是讓你體驗什麼是機器學習而已,直接拿 MLlib 的 ALS.train() 來作 collaborative filtering ,然後用 Root Mean Square Error (RMSE) 評估準確度。
這門課才五週就這樣結束啦,最後拿到 BerkeleyX CS100.1x 證書。