(在家觀看 = 0%,在校觀看 = 100%)
100% 在校觀看日期及時間:
自由選擇,點選以下地區觀看辦公時間及位置
課時: 12 小時
享用時期: 報讀日至 4 星期內,進度由您控制,可快可慢。
課堂錄影導師:Franco
在校免費試睇:首 1 小時,請致電以上地點與本中心職員預約。
本課程提供在校免費重睇及導師解答服務。
(在家觀看 = 100%,在校觀看 = 0%)
100% 在家觀看日期及時間:
每天 24 小時全天候不限次數地觀看
學費:$2,980 報名 phone
電話:2332-6544
課時: 12 小時
享用時期: 報讀日至 4 星期內,進度由您控制,可快可慢。
課堂錄影導師:Franco
在校免費試睇:首 1 小時,請致電以上地點與本中心職員預約。
本課程提供導師解答服務。
Apache Spark 是高速叢集運算框架 (Lightning-fast cluster computing framework)。 它擴充及優化了傳統的 MapReduce 模型令 Apache Spark 變得更易擴展 (scalable)、更具彈性 (flexible) 及具備容錯功能 (fault-tolerant)。能夠操作 Apache Spark 的程式語言亦有不少的選擇,例如 Scala、Java 等。而 Scala 是被視為最能夠發揮 Apache Spark 功能的程式語言。
Apache Spark 提供了一個全面而統一的框架以進行大數據分析 (Big Data Analysis),當中包括 RDD (Resilient Distributed Datasets)、Map Reduce、Spark SQL、GraphX 等,有了上述的元素,就能更簡便地進行不同形式的大數據分析 (Big Data Analysis)。
除大數據分析 (Big Data Analysis) 外,Apache Spark 亦提供了一系列用作機器學習 (Machine Learning) 的函式庫 (libraries),這強大的函式庫能夠:
- 向用戶推薦用戶可能有興趣的產品
- 從文章有效地選出關鍵字 (例如能夠理解 I, is 等不是關鍵字)
- 理解消費者會同時購買甚麼產品
- 製作決策樹
- 將數據分類
- 線性回歸 (Linear Regression) 分析
- 更多
由於大數據分析 (Big Data Analysis) 及機器學習 (Machine Learning) 的技術相當獨特,所謂萬事起頭難,在初次學習 Apache Spark 難免遇到不同程度的障礙。本基礎課程旨在有系統地,透過具針對性的實戰例子教授學員 Apache Spark 的大數據分析 (Big Data Analysis) 及機器學習 (Machine Learning) 的技術。請 按此 了解詳細的課程內容。
課程名稱: |
Apache Spark + Scala 大數據分析 (Big Data Analysis) 及機器學習 (Machine Learning) 技術基礎課程 - 簡稱:Apache Spark + Scala Big Data Machine Learning Training Course |
課程時數: | 12 小時 (共 4 堂) |
適合人士: | 必要的背景知識:
非必要的背景知識:
|
授課語言: | 以廣東話為主,輔以英語 |
課程筆記: | 本中心導師親自編寫中文為主筆記,而部份中文字附有英文對照。 |
課程名稱:Apache Spark + Scala 大數據分析 (Big Data Analysis) 及機器學習 (Machine Learning) 技術基礎課程 - 簡稱:Apache Spark + Scala Big Data Machine Learning Training Course |
第一部份:Scala 語言
Scala 語言是被視為最能夠發揮 Apache Spark 功能的程式語言。這部份會教授 Scala 語言。
第二部份:Apache Spark 的大數據分析 (Big Data Analysis)
在第二部份會開始安裝 Apache Spark (Single-node 及 Multi-node Cluster),並開始教授 RDD (Resilient Distributed Dataset) 內的各種 transformations、actions 及 persistence。然後使用上述技術實踐經典的 Word Count。這部份最後會教授 Spark SQL,令大家可以透過大家已經熟悉的 SQL 進行各項有趣的操作,例如使用 SQL 操作 JSON 數據。
第三部份:Apache Spark 的機器學習 (Machine Learning)
在第三部份會集中教授 Apache Spark 的機器學習 (Machine Learning) 函式庫 (libraries) 進行以下的機器學習活動。
- 背景知識
- Vectors [org.apache.spark.mllib.linalg.Vector]
- LabeledPoint [org.apache.spark.mllib.regression.LabeledPoint]
- Statistics [org.apache.spark.mllib.stat.Statistics]
- count, max, min, mean, variance, etc.
- 向用戶推薦用戶可能有興趣的產品 [org.apache.spark.mllib.recommendation.ALS]
- 從文章有效地選出關鍵字 (例如能夠理解 I, is 等不是關鍵字) [org.apache.spark.mllib.feature.{HashingTF, IDF}]
- 理解消費者會同時購買甚麼產品 [FP-Growth algorithm 及 org.apache.spark.mllib.fpm.FPGrowth]
- 製作決策樹 [org.apache.spark.mllib.tree.DecisionTree]
- 將數據分類 [org.apache.spark.mllib.clustering.KMeans]
- 線性回歸 (Linear Regression) 分析 [org.apache.spark.mllib.regression.LinearRegressionWithSGD]
詳細課程內容請參考桌面版網頁 http://www.systematic.com.hk/apache-spark-scala-big-data-analysis-machine-learning.htm?panel=3
1 Spark 介紹
2 Scala 語言
2.1 Scala 介紹
2.1.1 Functional programming (函數程式語言)
2.2 安裝及環境設定
2.2.1 安裝 Linux
2.2.2 安裝 Java
2.2.3 設定並測試 Java
2.2.4 安裝 Scala
2.2.5 設定並測試 Scala
2.2.6 安裝 ScalaIDE
2.2.7 設定並開啟 ScalaIDE
2.2.8 編寫 Hello World 程式
2.2.8.1 實習:使用 ScalaIDE 編寫 Scala Hello World 程式
2.2.8.2 實習:使用文字檔編寫 Scala Hello World 程式
3 Scala (Scalable Language) 語言
3.1 變數 (variables) / Identifiers
3.1.1 變數 (variables) / Identifiers 概念
3.1.2 Scala 的 data types
3.1.3 實習:變數 (variables) / Identifiers
3.2 Classes 與 objects in Scala
3.2.1 Classes 與 objects in Scala 概念
3.2.2 實習:Classes 與 objects in Scala
3.3 Inheritance in Scala
3.3.1 Inheritance in Scala 概念
3.3.2 實習:Inheritance in Scala
3.4 If, then, else in Scala
3.4.1 If, then, else in Scala 概念
3.4.2 實習:If, then, else in Scala
3.5 Function in Scala
3.5.1 Function in Scala 概念
3.5.2 實習:Function in Scala
3.6 Closure in Scala
3.6.1 Closure in Scala 概念
3.6.2 實習:Closure in Scala
3.7 String in Scala
3.7.1 String in Scala 概念
3.7.2 實習:String in Scala
3.8 Formatted string in Scala
3.8.1 Formatted string in Scala 概念
3.8.1.1 %f
3.8.1.2 %d
3.8.1.3 %s
3.8.2 實習:Formatted string in Scala
3.8.2.1 實習:Formatted string in Scala:%f
3.8.2.2 實習:Formatted string in Scala:%d
3.8.2.3 實習:Formatted string in Scala:%s
3.9 String interpolation in Scala
3.9.1 String interpolation in Scala 概念
3.9.2 實習:String interpolation in Scala
3.10 Array in Scala
3.10.1 Array in Scala 概念
3.10.2 實習:Array in Scala
3.11 Multidimensional arrays in Scala
3.11.1 Multidimensional arrays in Scala 概念
3.11.2 實習:Multidimensional arrays in Scala
3.12 Array concatenation
3.12.1 Array concatenation 概念
3.12.2 實習:Array concatenation
3.13 Range in Scala
3.13.1 Range in Scala 概念
3.13.2 實習:Range in Scala
3.14 Trait in Scala
3.14.1 Trait in Scala 概念
3.14.2 實習:Trait in Scala
3.15 Regex in Scala
3.15.1 Regex in Scala 概念
3.15.2 實習:Regex in Scala
3.16 Exception handling in Scala
3.16.1 Exception handling in Scala 概念
3.16.2 實習:Exception handling in Scala
3.17 FileI/O in Scala
3.17.1 FileI/O: write file in Scala
3.17.1.1 FileI/O: write file in Scala 概念
3.17.1.2 實習:FileI/O: write file in Scala
3.17.2 FileI/O: read console in Scala
3.17.2.1 FileI/O: read console in Scala 概念
3.17.2.2 實習:FileI/O: read console in Scala
3.17.3 FileI/O: read file in Scala
3.17.3.1 FileI/O: read file in Scala概念
3.17.3.2 實習:FileI/O: read file in Scala
3.17.4 FileI/O: delete file in Scala
3.17.4.1 FileI/O: delete file in Scala概念
3.17.4.2 實習:FileI/O: delete file in Scala
4 Apache Spark 安裝 (一台伺服器) 及進行相關的系統設定
4.1 Apache Spark 的結構
4.2 Cluster
4.2.1 Cluster 詞彙表
4.2.2 Cluster 元件間的關係
4.2.3 Cluster 資源分配 (多部 nodes 的情況)
4.2.3.1 Static allocation
4.2.3.1.1 例子:5 Nodes (each node have 16 cores, 64 GB RAM)
4.2.3.1.1.1 Number of cores
4.2.3.1.1.2 Number of executors
4.2.3.1.1.3 Memory for each executor
4.2.3.2 Dynamic allocation
4.3 安裝Spark (一台伺服器)
5 Spark Core 及大數據分析
5.1 Spark Shell 與 SparkContext
5.1.1 Spark Shell
5.1.1.1 實習:啟動 Spark Shell
5.1.2 SparkContext (org.apache.spark.SparkContext)
5.1.2.1 實習:取得 SparkContext 現有的設定
5.1.3 Log levels
5.1.3.1 實習:設定 Log levels
5.2 RDD (Resilient Distributed Dataset)
5.2.1 RDD 介紹
5.2.2 產生 RDD
5.2.2.1 實習:產生 RDD (Int)
5.2.2.2 實習:產生 RDD (String)
5.2.3 RDD transformations (Single RDD)
5.2.3.1 map
5.2.3.1.1 實習:map (做法1 [for Int])
5.2.3.1.2 實習:map (做法2 [for Int])
5.2.3.1.3 實習:map (做法3 [for Int])
5.2.3.1.4 實習:map (做法4 [for String])
5.2.3.1.5 實習:map (做法5 [for String to (String, Int) Pair])
5.2.3.1.6 實習:map (做法6 [for String to Class])
5.2.3.2 filter
5.2.3.2.1 實習:filter (做法1)
5.2.3.2.2 實習:filter (做法2)
5.2.3.3 distinct
5.2.3.3.1 實習:distinct (例子 1)
5.2.3.3.2 實習:distinct (例子 2)
5.2.3.4 randomSplit
5.2.3.4.1 實習:randomSplit
5.2.3.5 “不 random” 的 split
5.2.3.5.1 實習:“不 random” 的 split
5.2.3.6 flatmap
5.2.3.6.1 實習:flatmap
5.2.3.7 map vs flatmap
5.2.3.7.1 實習:map vs flatmap
5.2.4 RDD transformations (Multiple RDDs)
5.2.4.1 Union
5.2.4.1.1 實習:Union (做法1)
5.2.4.1.2 實習:Union (做法2)
5.2.4.2 Intersection
5.2.4.2.1 實習:Intersection
5.2.4.3 Subtract
5.2.4.3.1 實習:Subtract
5.2.4.4 Cartesian
5.2.4.4.1 實習:Cartesian
5.2.5 RDD actions
5.2.5.1 first
5.2.5.1.1 實習:first
5.2.5.2 take
5.2.5.2.1 實習:take
5.2.5.3 takeOrdered
5.2.5.3.1 實習:takeOrdered (用法 1)
5.2.5.3.2 實習:takeOrdered (用法 2)
5.2.5.3.3 實習:takeOrdered (用法 3)
5.2.5.3.4 實習:takeOrdered (用法 4)
5.2.5.4 RDD 的基本統計操作
5.2.5.4.1 實習:RDD 的基本統計操作
5.2.5.4.1.1 實習:RDD 的基本統計操作:min
5.2.5.4.1.2 實習:RDD 的基本統計操作:max
5.2.5.4.1.3 實習:RDD 的基本統計操作:stdev
5.2.5.4.1.4 實習:RDD 的基本統計操作:count
5.2.5.4.1.5 實習:RDD 的基本統計操作:sum
5.2.5.4.1.6 實習:RDD 的基本統計操作:mean
5.3 Single key value pair RDD transformations
5.3.1 實習:取得所有 keys
5.3.2 實習:取得所有 values
5.3.3 實習:基於 key 進行過濾 (filter)
5.3.4 實習:基於 value 進行過濾 (filter)
5.3.5 實習:基於 key 進行排序 (sort) [第一部份]
5.3.6 實習:基於 key 進行排序 (sort) [第二部份]
5.3.7 實習:基於 value 進行排序 (sort) [第一部份]
5.3.8 實習:基於 value 進行排序 (sort) [第二部份]
5.3.9 實習:map (基本應用)
5.3.10 實習:map (key 與 value 反轉)
5.3.11 實習:mapValues
5.3.12 實習:reduceByKey (做法1)
5.3.13 實習:reduceByKey (做法2)
5.4 Multiple key value pair RDDs transformations
5.4.1 Join
5.4.1.1 實習:Join
5.4.1.2 實習:leftOuterJoin
5.4.1.3 實習:rightOuterJoin
5.4.2 subtractByKey
5.4.2.1 實習:subtractByKey
5.5 Key Value RDD actions
5.5.1 first
5.5.1.1 實習:first (Basic)
5.5.1.2 實習:first (key)
5.5.1.3 實習:first (value)
5.5.1.4 實習:取出單一項目的 key
5.5.1.5 實習:取出單一項目的 value
5.5.2 take
5.5.2.1 實習:take (Basic)
5.5.2.2 實習:take (keys)
5.5.2.3 實習:take (values)
5.5.3 countByKey
5.5.3.1 實習:countByKey
5.5.4 countByValue
5.5.4.1 實習:countByValue
5.5.5 collectAsMap
5.5.5.1 實習:collectAsMap (第一部份 [with bugs])
5.5.5.2 實習:bug fix with reduceByKey
5.5.6 在 Pair RDD 中從 key 取得 value(s)
5.5.6.1 實習:在 Pair RDD 中從 key 取得 value(s)
5.6 Partition
5.6.1 實習:Partition
5.7 RDD Persistence
5.7.1 實習:從檔案建立 RDD
5.7.2 實習:RDD Persistence
5.8 RDD transformation 的懶惰 (laziness)
5.8.1 實習:感受 RDD transformation 的懶惰 (laziness)
5.8.2 懶惰 (laziness) 的好處
5.9 Aggregate
5.9.1 實習:Aggregate
5.10 綜合例子
5.10.1 Word Count
5.10.1.1 實習:Word Count
5.10.2 π estimation
5.10.2.1 π estimation 背後的數學理論
5.10.2.1.1 圓形、正方形及畢氏定理
5.10.2.1.2 π 與圓形、正方形及畢氏定理的關係
5.10.2.2 實習:π estimation by Apache Spark
5.10.3 分析Apache access_log
5.10.3.1 實習:Apache access_log
6 Apache Spark Cluster 安裝及設定 (多台伺服器)
6.1 Network topology (網絡接駁圖)
6.2 安裝 Apache Spark Cluster
6.2.1 Apache Spark Cluster 安裝流程圖
6.2.2 安裝 Apache Spark Cluster
6.2.2.1 DNS / host file
6.2.2.2 SSH connections
6.2.2.3 安裝 Java, Scala 和Apache Spark
6.2.2.4 設定 spark workers / slaves
6.2.2.5 設定 spark-env.sh
6.2.2.6 啟動 Apache Spark Cluster
6.3 使用 Apache Spark Cluster
7 Spark SQL
7.1 Spark SQL 介紹
7.2 DataFrame
7.2.1 DataFrame
7.2.2 JSON (JavaScript Object Notation)
7.2.3 實習:JSON 與 DataFrame
7.2.3.1 實習:建立 JSON 檔案
7.2.3.2 實習:From JSON to DataFrame 並顯示整個 2D table
7.2.3.3 實習:From DataFrame to JSON
7.2.3.4 實習:顯示首一個 row 的資料
7.2.3.5 實習:顯示首 2 個 row 的資料
7.2.3.6 實習:顯示欄位內容
7.2.3.7 實習:顯示合共有多少筆資料
7.2.3.8 實習:過濾 (跟SQL statement 的 WHERE 相似)
7.2.3.9 實習:多重過濾
7.2.3.10 實習:排序 (順序)
7.2.3.11 實習:排序 (倒序)
7.2.3.12 實習:多重排序
7.2.3.13 實習:只顯示某一欄位的資料
7.2.3.14 實習:以樹狀顯示 Schema
7.2.4 實習:DataFrame 的aggregate functions 與其他常用的 functions
7.2.4.1 實習:事前準備
7.2.4.2 實習:max
7.2.4.3 實習:min
7.2.4.4 實習:sum
7.2.4.5 實習:mean
7.2.4.6 實習:distinct
7.2.5 由原始資料建立 DataFrame
7.2.5.1 實習:由原始資料建立 DataFrame (基本:第一部份)
7.2.5.2 實習:由原始資料建立 DataFrame (基本:第二部份)
7.2.5.3 實習:由原始資料建立 DataFrame (具 Scala class 概念)
7.3 RDD 與 DataFrame 的轉換
7.3.1 實習:CSV → Scala case class → RDD → DataFrame
7.3.1.1 實習:準備 CSV
7.3.1.2 實習:建立 Scala case class
7.3.1.3 實習:建立 RDD 再透過 RDD 建立 DataFrame
7.3.2 實習:DataFrame → RDD
7.3.2.1 實習:DataFrame → RDD (方法1)
7.3.2.2 實習:DataFrame → RDD (方法2 [較好])
7.3.2.3 實習:DataFrame → Dataset
7.4 TempView 與 SQL statements
7.4.1 實習:TempView 與 SQL statements
7.5 Parquet files (Apache Parquet)
7.5.1 Apache Parquet 介紹
7.5.2 實習:寫入 Parquet files
7.5.3 實習:讀取 Parquet files
7.5.4 實習:JSON → Parquet files
8 Apache Spark 機器學習 (Machine Learning)
8.1 背景知識
8.1.1 Vectors [org.apache.spark.mllib.linalg.Vector]
8.1.1.1 實習:Vectors [org.apache.spark.mllib.linalg.Vector]
8.1.2 LabeledPoint [org.apache.spark.mllib.regression.LabeledPoint]
8.1.2.1 實習:LabeledPoint [org.apache.spark.mllib.regression.LabeledPoint]
8.1.3 RDD → VectorRDD
8.1.3.1 實習:RDD → VectorRDD
8.1.4 Statistics [org.apache.spark.mllib.stat.Statistics]
8.1.4.1 實習:Statistics [org.apache.spark.mllib.stat.Statistics]
8.1.4.1.1 實習:事前準備
8.1.4.1.2 實習:count
8.1.4.1.3 實習:max
8.1.4.1.4 實習:min
8.1.4.1.5 實習:mean
8.1.4.1.6 實習:numNonzeros
8.1.4.1.7 實習:variance
8.2 向用戶推薦用戶可能有興趣的產品 [org.apache.spark.mllib.recommendation.ALS]
8.2.1 ALS (Alternating Least Squares) 推薦演算法介紹
8.2.1.1 用戶評價 / 點擊率
8.2.2 實習:推薦演算法小試牛刀
8.2.2.1 實習:建立模型
8.2.2.2 實習:向某一客戶推薦 5 個產品
8.2.2.3 實習:了解客戶對某一產品的喜歡程度
8.2.2.4 實習:了解有甚麼潛在客戶喜歡某一產品
8.2.3 實習:透過大數據向用戶推薦用戶可能有興趣的產品
8.2.3.1 實習:事前準備
8.2.3.2 實習:建立模型
8.2.3.3 實習:向客戶 88 推薦 10 個產品
8.2.3.4 實習:向客戶 88 對產品 800 的潛在評價
8.2.3.5 實習:列出 10 位潛在客戶 “應該” 喜歡產品 800
8.3 從文章有效地選出關鍵字 [org.apache.spark.mllib.feature.{HashingTF, IDF}]
8.3.1 is, am, are 等是否關鍵字?
8.3.2 TF-IDF (Term Frequency–Inverse Document Frequency)
8.3.2.1 TF (Term Frequency)
8.3.2.2 IDF (Inverse Document Frequency)
8.3.3 實習:從文章有效地選出關鍵字
8.3.3.1 實習:事前準備
8.3.3.2 實習:Term Frequency (TF) vectors
8.3.3.3 實習:Inverse Document Frequency (IDF) model
8.3.3.4 實習:TD-IDF RDD[Vector]
8.3.3.5 實習:分析結果
8.4 理解消費者會同時購買甚麼產品
8.4.1 Beer and diapers (啤酒和尿布) / Affinity analysis
8.4.2 FP-Growth 演算法
8.4.2.1 步驟 1:基本數據處理
8.4.2.2 步驟 2:製作 FP Tree
8.4.2.3 步驟 3:數據挖掘:例子1:購買產品 p 會同時購買甚麼產品
8.4.2.4 步驟 4:數據挖掘:例子2:購買產品 m 會同時購買甚麼產品
8.4.2.5 步驟 5:數據挖掘:例子3:購買產品 b 會同時購買甚麼產品
8.4.3 實習:理解消費者會同時購買甚麼產品
8.4.3.1 實習:基本數據處理
8.4.3.2 實習:建立模型
8.4.3.3 實習:分析結果
8.4.3.3.1 實習:列出所有關聯
8.4.3.3.2 實習:只列出產品 p 跟其化產品的關聯 [呼應章節 8.4.2.3]
8.4.3.3.3 實習:只列出產品 m 跟其化產品的關聯 [呼應章節 8.4.2.4]
8.4.3.3.4 實習:只列出產品 b 跟其化產品的關聯 [呼應章節 8.4.2.5]
8.5 製作決策樹 (Decision tree)
8.5.1 決策樹 (Decision tree)
8.5.1.1 簡單的情景
8.5.1.2 複雜一點的情景
8.5.2 實習:製作決策樹 (Binary Decision tree)
8.5.2.1 實習:製作決策樹 (Binary Decision tree):一個因素
8.5.2.1.1 實習:基本數據處理
8.5.2.1.2 實習:建立模型
8.5.2.1.3 實習:分析結果
8.5.2.2 實習:製作決策樹 (Binary Decision tree):有部份 “無用” 的因素
8.5.2.2.1 實習:基本數據處理
8.5.2.2.2 實習:建立模型
8.5.2.2.3 實習:分析結果
8.5.2.3 實習:製作決策樹 (Binary Decision tree):多個因素
8.5.2.3.1 實習:基本數據處理
8.5.2.3.2 實習:建立模型
8.5.2.3.3 實習:分析結果
8.6 將數據分類
8.6.1 KMean / Lloyd-Forgy / Forgy's algorithm
8.6.2 實習:將數據分類
8.6.2.1 實習:基本數據處理
8.6.2.2 實習:建立模型
8.6.2.3 實習:分析結果
8.7 線性回歸 (Linear Regression) 分析
8.7.1 線性回歸分析
8.7.1.1 實習:線性回歸分析
8.7.1.1.1 實習:基本數據處理
8.7.1.1.2 實習:建立模型
8.7.1.1.3 實習:分析結果
8.7.2 多元線性回歸分析
8.7.2.1 實習:多元線性回歸分析 (學習微調 step size)
8.7.2.1.1 實習:基本數據處理
8.7.2.1.2 實習:建立模型
8.7.2.1.3 實習:分析結果
9 Appendix: Graph-parallel computation by GraphX
9.1 Graph-parallel computation
9.1.1 Graphs
9.1.1.1 Vertex
9.1.1.2 Edge
9.1.1.3 Triplet
9.1.1.3.1 組合
9.1.1.3.2 方向性
9.1.1.3.3 多重關係
9.2 實習:Graph-parallel computation by GraphX
9.2.1 實習:事前準備
9.2.2 實習:建立 Vertex
9.2.3 實習:建立 Edge
9.2.4 實習:建立 Graph
9.2.5 實習:分析 Graph
9.2.5.1 實習:分析 Graph:從 Graph 中分析 Vertex:例子1
9.2.5.2 實習:分析 Graph:從 Graph 中分析 Vertex:例子2
9.2.5.3 實習:分析 Graph:從 Graph 中分析 Edge
9.2.5.4 實習:分析 Graph:從 Graph 中分析 Vertex 和 Edge:列出所有關係
9.2.5.5 實習:分析 Graph:從 Graph 中分析 Vertex 和 Edge:多重分析