1. 程式人生 > >大資料學習,Scala快速學習的方法

大資料學習,Scala快速學習的方法

大資料學習過程中,都會學習Scala,眾所周知,Spark支援4門語言,分別為RPythonJavaScala,但真正的底層實現語Scala。在我以往的踐分享中,除了Python,我會利用Scala踐一遍,而且在面模的資料建模中,我都會推薦去使用HadoopSpark去工程開,充分利用叢集的源。很多在科多大資料培訓的在讀學員,經常對於學習方法比較提出一文,本文大家快速瞭解Scala,並且學會如何學和使用Scala

一、哪些人群適合學Scala

你必要有清晰的職業發劃,而不是追逐著潮流去亂學一通,要學以致用,而不是學非所用!

因此,如果你定位是成

一名 大資料開工程、資料用架構 ,你需要去了解,更要往底深入的學

如果你定位是成一名 ETL工程、資料探勘工程 ,你需要去了解,更要往用去學

除此之外,我並不建你花心思去折它,竟你工作景中也使用不到。

二、哪個段適合學Scala

我並不支援一上來就直接去學它,因跬步無以至千里,我更希望你有一定Python或者java的基,再瞭解一些Hadoop/Spark用,才能更好,更快去上手,而不是陷入一種困惑:我學它到底有什麼用?

對於學習順序,建議java-hadoop-hive-hbase-flume-kafka-storm-scala-spark

三、使用Scala有什麼優勢

它並不是你在面試時候能裝一裝,因如果只懂皮毛,反而是弄巧成拙,那就不好了。

它的初衷,是因為實際工作景中有需要,平臺叢集境所決定,用合適的工具做正確的事,此而已。

就我目前的體來看,它肯定比PythonR這類語言更適合大規模資料的工程開,更符合上挖掘業務的生使用。它也比MapReduceJava這類語言更簡潔,更高效去開發,而且能提高計算效率

當然,技不侷限於只固定使用一種言,而是從業務境角度,靈活選擇合適的言去開業務

四、如何能學Scala

可以選擇購買一些相關

籍,或者在找學習資源,這類資源都非常多,但無經驗的小夥伴,尤其是0是建,可以自學也可以選擇的培機構

五、哪些知需要掌握?

除了參考網的學習資料外,裡分享一些必要的基,便於你聚焦學方向。

語言的背景(瞭解

scala是一java機(JVM執行境並將面向象和函式式程的最佳特性合在一起的靜態類言。

scala粹的面向象的言。java雖然是面向物件的語言,但是它不是純粹的,因為java的基本資料型不是,並且在java有靜員變量和靜方法。相反,scala粹面向象的,每個都是象,每個操作都是方法調用。

scala也是一個成熟的函式式言。函式式程有兩個指思想:

a. 函式是,也就是函式也是,並且和其他型(如整數、字串等)於同一地位,函式可以被當作引數傳遞,也可以被當作返回返回,可以在函式中定函式等等;

b. 程式的操作應該對映為輸而不是就地修改,也就是函式調用不應產生副作用,然函式式言鼓勵使用無副作用的方法,但是scala並不制你必須這麼做。

scala你使用指令式的格,但是隨著你scala的深入瞭解,你可能會更向於一種更函式式的格。向函式式轉變,你就應該儘量去使用val、不可變對象、無副作用方法,而不是var、可變對象、有副作用方法。要明白的是,從指令式程向函式式程的轉變會很困,因此你要做好充分的準,並不斷的努力。

scala運行於JVM之上,並且它可以訪問任何的java類庫並且與java框架行互操作,scala也大量重用了java型別和類庫

使用IDE實現Hello Scala踐)

除了Scala器外,我更常用IDE去開,比如利用已部署好的境,開一個Demo程式。

object Demo {

def main(args: Array[String]) {

println("Hello Scala.")

}

}

其中,有幾個寫法的注意事,需要你去了解的,具體如下所示:

01. scala中,句之後的“;”是可的。當有多個句在同一行,必加上分號,但不建把多個句放在一行。

02. 使用2個空格作碼縮排,常的朋友會向於一個Tab

03. Scala的索引也是從0開始的,但是元祖從1開始。

04. 不管是Import方法,是匹配,使用 _ 相當於Java中的 * 作用。

Scala的資料型(常用)

它有7種數值類型:ByteCharShortIntLongFloatDouble,以及2種非數值類型:BooleanUnit(只有一個“()”,相當於javac++中的void,即空)。

這些型別都是抽象的final(不能使用new新建,也不能被),在scala包中定,是java基本資料型的包裝,因此與java基本資料型有相同的度。

另外,scala沿用了java.lang包中的String。在scala中,常量也稱作字面量,字串字面量由雙引號包含的字元成,同scala提供了另一種定字串常量的——原始字串,它以三個雙引號作開始和束,字串內部可以包含無何種任意字元。

scala中,我使用方法,而不是轉換,來做數值類型之轉換,如99.44.toInt97.toChar

Scala型(常用)

它有兩種量:valvarval如同java中的final變數,var如同java中的非final變數

由於scala是完全面向象的,因此valvar只是聲明瞭象的引用是不可是可的,並不能明引用指向的象的可性。

宣告量的同需要初始化之,否則該變量就是抽象的。如果不指定量的型,編譯器會從初始化它的表示式中推斷出其型。

當然你也可以在必要的候指定其型,但注意,在scala量或函式的是寫在量或函式的名稱的後

val str : String = “Hello Scala.”

Scala的控制構(常用)

它與其他言有一個根本性差異,也就是幾乎所有構造出來的構都有,從而使得程式構更加精

它內建的控制構很少,ifwhilefortrymatch和函式調用等而已,所以熟悉就足了。如此之少的理由是,scala面上支援函式字面量。

另外,scala中沒有breakcontinue語句,如果有需要類似功能,可以間接性去實現,如使用Boolean的控制量、巢狀函式等。

Scala的函式定(常用)

函式,除了遞迴函式之外,可以省略返回值類型宣告,它會根據=號後的表示式的型推斷返回值類型,同=號後表示式的就是函式的返回,你無需使用return語句

它推薦你使用表示式代替return返回,當然根據需要,也可以式使用return返回

def getNowDate():String={

var now:Date = new Date()

var dateFormat:SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")

var todatTime = dateFormat.format(now)

todatTime

}

以上函式的意思是取當前日期,如今天2018-10-19。而遞迴函式必指定返回值類型,如下斐波拉契數列所示:

def fac(n: Int) : Int = if(n <= 0 ) 1 else n * fac(n-1)

最後,如果沒有函式返回,返回Unit

Scala的異常理(常用)

它與java似,但也有區,如它不需要提前宣告函式、方法可能會丟擲的某種異常。而且throwtry-catch-finally表示式都是有的,當沒拋異常try處為表示式的值;當拋異常被捕獲時,catch處為表示式的值;當拋異常沒被捕獲時,就沒有返回值;finally處計算得到表示式值,不過它常用於處理 檔案、 等。

也就是,如果你想快速入Scala這麼語言,能夠去實踐開發一些小模型,資料處理邏輯,等等。那上面這7點知,基本囊括了你短期學的方向,而更深入的知點,可以在後期漏,實際場景去調研,去學,去使用。

更多學習資料,可以我留言

六、學好Scala的核心關

這也是學習任何一門語言,甚至是手藝的通用方法,這裡很簡化去概括,更多細節需要慢慢去體會

第一點:必要的基打扎

第二點:多找開發場景去踐,目的是手、遇到新問題鍛鍊解決問題的能力;

第三點:遇到開,先理清瓶在哪裡?再多搜尋網絡資針對性去解決;

第四點:完整去開一個全流程的資料目,甚至是業務場景模型,把零散知識貫穿起來;

道理可能大家都懂,但是方法一定要選擇正確,才能事半功倍。