對spark和scala的進一步學習

在完成尹老師最初給我們佈置的基於spark streaming的logistic學習後,我們與尹老師進行了一定的交流。尹老師主要對前期工作的提出了一些意見,如scala程序不規範、對廣義線性模型理解不夠透徹等問題。我們自己在編程的過程中也發現由於對scala和spark的知識理解的過少,寫程序的時候捉襟見肘。因此,尹老師通過郵件給我們發了很多學習材料,希望我們借這個機會深入的學習scala編程語言和spark的運行機制,這樣,寫出來的程序才能正確運行並且符合規範。

這一週我們也主要是學習了尹老師給我們的材料,商討下一階段的任務,本博文中將簡要介紹我們這周學習的內容。

1、小象學院上尹老師的《spark上機器學習方法的模式與性能》課程

上面的視頻鏈接如下(http://www.chinahadoop.cn/course/41),這個課程是尹老師在小象學院開課的視頻,可以免費觀看。

MLlib是spark中的一個機器學習的組件,課程中詳細介紹了MLlib的組成框架,如下圖所示。

尹老師特別強調了scala語言的表達能力比較強,因此看spark的程序往往比較簡潔,但是並不是簡單易懂,因此,尹老師基於spark裏面的開源的MLlib代碼對幾個機器學習的代碼進行了簡要講解,如SVM、linear Regression、決策樹等。

課程中還對spark runtime進行了詳細地講解,如下圖所示。

在啓動spark程序的時候,master和worker都運行起來了,執行程序的地方叫做driver,driver會向master請求計算資源,master通知worker給driver計算資源叫做executor,這樣driver和executor可以相互交互進行程序計算。

接下來,尹老師對spark裏面最重要的概念RDD進行了講解,因爲spark的特點就在於RDD這個底層的數據結構提供了數據共享支持。關於RDD的介紹詳見鏈接(http://shiyanjun.cn/archives/744.html),這篇鏈接是一個人翻譯的berkeley的文章“ResilientDistributed Datasets: A Fault-Tolerant Abstraction for In-Memory ClusterComputing”的,寫的挺不錯。


2、github上尹老師“Spark Internals:Deploy, Scheduling and RDD”博文

本博文看起來寫得比較詼諧,但是理解還是有點難度,對於我們這種初學者來說很多概念都沒搞懂,但還是堅強地把它看完了,文章主要講的是spark-submit運行的時候的機器內部的運行機制。

裏面主要涉及了幾個概念Driver、Master、worker、Executor。

另外SparkContext是其中一個很重要的變量,我們寫出來的spark程序能進行分佈式計算的最源頭就在於我們寫下了sc = new SparkContext()。後期我們讀入的數據,spark會自動地分佈式地存儲在RDD中。

 

3、spark的Scala語言編程規範

這一部分的鏈接見:https://cwiki.apache.org/confluence/display/SPARK/Spark+Code+Style+Guide。

裏面主要提到了如下幾點

① 一般的函數縮進佔用兩個空格符,在函數中對變量的定義建議用4個空格進行縮進,見下圖

②括號的用法,在佔用多行的if/else語句中加入花括號,僅佔用一行的if/else語句不建議用花括號,如下圖所示。


4、coursera上scala語言的課程

這一部分的鏈接見https://class.coursera.org/progfun-004。

這個課程是scala語言的發明者Martin Odersky講授的scala課程,講解非常清晰易懂,對scala語言的學習幫助非常大。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章