[SPARK] RDD, Action 和 Transformation (2)

在Spark中, 資料的基本架構為 RDD (Resilient Distributed Dataset),
RDDs 可以使用 Hadoop InputFormats (例如 HDFS 文件) 創建,
也可以從其他的 RDDs 轉換.
我們可以簡單的從一個文字檔建立 RDD, 例如:

scala> val textFile = sc.textFile("README.md")

基本上, 就是從文字檔中建立一個 RDD 物件,
此時, 該 RDD 物件已經轉換成 string array 的格式,
可以透過: scala> textFile.collect() 查看,

RDD 仍保有HDFS的特性, 也就是 key-value 的格式,
在 textFile 這個 RDD 中, key 就是第幾行, value 則是每行的數值,
對於所有的 RDD, 我們都有兩種操作: action 和 transformation,
RDD 的 actions 從 RDD 中返回值,
transformations 可以轉換成一個新 RDD 並返回它的引用.
如下圖表示:


簡單來說, 經過 transformation 後的 RDD,
仍然保有和原本 RDD 相同的 key-value 的形式,
而經過 action 運算之後, key-value 的形式則和原本 RDD 不同,
舉例來說,

scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))

filter 是一個 transformation 運算,
雖然新產生的 RDD (linesWithSpark) 行數較少,
但仍然是 string array 的格式.

scala> textFile.count() // RDD 的數據行數
res0: Long = 126
scala> textFile.first() // RDD 的第一行數據
res1: String = # Apache Spark

count 和 first 都是一個 action 運算,
此時, RDD 的格式變成 long 和 string, 而不是 string array 的格式.

透過 transformation 和 action, 我們就可以開始設計平行計算架構,
在官方的介紹中, 也說明了 map-reduce 架構的範例:
https://taiwansparkusergroup.gitbooks.io/spark-programming-guide-zh-tw/content/quick-start/using-spark-shell.html
可以作為 Spark 一開始學習的參考.

留言

熱門文章

LTE筆記: RSRP, RSSI and RSRQ

[WiFi] WiFi 網路的識別: BSS, ESS, SSID, ESSID, BSSID

LTE筆記: 波束成型 (beamforming) 和天線陣列