-
1 # 大資料就是大格局
-
2 # Java實用技術
大資料學習過程中,都會學習Scala,眾所周知,Spark支援4門語言,分別為R、Python、Java與Scala,但真正的底層實現語言則是Scala。在我以往的實踐分享中,除了Python,我還會利用Scala去實踐一遍,而且在面對大規模的資料建模中,我都會推薦去使用Hadoop、Spark去工程開發,充分利用叢集的計算資源。很多在科多大資料培訓的在讀學員,經常對於學習方法比較提出一文,本文讓大家快速瞭解Scala,並且學會如何學習和使用Scala
一、哪些人群適合學習Scala?
你必須要有清晰的職業發展規劃,而不是追逐著潮流去亂學一通,要學以致用,而不是學非所用!
因此,如果你定位是成為一名 大資料開發工程師、資料應用架構師 的話,你需要去了解,更要往底層深入的學習!
如果你定位是成為一名 ETL工程師、資料探勘工程師 的話,你需要去了解,更要往實踐應用去學習!
除此之外,我並不建議你花心思去折騰它,畢竟你工作場景中也使用不到。
二、哪個階段適合學習Scala?
我並不支援一上來就直接去學習它,因為不積跬步無以至千里,我更希望你有一定Python或者java的基礎,再瞭解一些Hadoop/Spark的應用,才能更好,更快去上手,而不是陷入一種困惑:”我學它到底有什麼用?”。
對於學習順序,建議java-hadoop-hive-hbase-flume-kafka-storm-scala-spark
三、使用Scala有什麼優勢?
學習它並不是讓你在面試時候能夠裝一裝,因為如果只懂皮毛,反而是弄巧成拙,那就不好了。
學習它的初衷,是因為實際工作場景中有需要,平臺叢集環境所決定,用合適的工具做正確的事,僅此而已。
就我目前的體驗來看,它肯定比Python、R這類語言更適合大規模資料的工程開發,更符合線上挖掘業務的生產使用。它也比MapReduce、Java這類語言更簡潔,更高效去開發,而且能提高計算效率。
當然,技術不侷限於只固定使用一種語言,而是從業務和環境角度,靈活選擇合適的語言去開發,讓技術服務於業務。
四、如何能學習上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中的 * 作用。
它有7種數值型別:Byte、Char、Short、Int、Long、Float和Double,以及2種非數值型別:Boolean和Unit(只有一個值“()”,相當於java和c++中的void,即空值)。
這些型別都是抽象的final類(不能使用new新建,也不能被繼承),在scala包中定義,是對java基本資料型別的包裝,因此與java基本資料型別有相同的長度。
另外,scala沿用了java.lang包中的String。在scala中,常量也稱作字面量,字串字面量由雙引號包含的字元組成,同時scala提供了另一種定義字串常量的語法——原始字串,它以三個雙引號作為開始和結束,字串內部可以包含無論何種任意字元。
在scala中,我們使用方法,而不是強制型別轉換,來做數值型別之間的轉換,如99.44.toInt、97.toChar。
④ Scala的變數型別(常用)
它有兩種變數:val和var。val如同java中的final變數,var如同java中的非final變數。
由於scala是完全面向物件的,因此val和var只是聲明瞭物件的引用是不可變的還是可變的,並不能說明引用指向的物件的可變性。
宣告變數的同時需要初始化之,否則該變數就是抽象的。如果不指定變數的型別,編譯器會從初始化它的表示式中推斷出其型別。
當然你也可以在必要的時候指定其型別,但注意,在scala中變數或函式的型別總是寫在變數或函式的名稱的後邊。
val str : String = “Hello Scala.”
⑤ Scala的控制結構(常用)
它與其他程式語言有一個根本性差異,也就是幾乎所有構造出來的語法結構都有值,從而使得程式結構更加精簡。
它內建的控制結構很少,僅有if、while、for、try、match和函式呼叫等而已,所以熟悉這幾類就足夠了。如此之少的理由是,scala從語法層面上支援函式字面量。
另外,scala中沒有break和continue語句,如果有需要類似功能,可以間接性去實現,如使用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的類似,但也有區別,如它不需要提前宣告函式、方法可能會丟擲的某種異常。而且throw、try-catch-finally表示式都是有值的,當沒拋異常時,try處為表示式的值;當拋異常被捕獲時,catch處為表示式的值;當拋異常沒被捕獲時,就沒有返回值;finally處計算得到表示式值,不過它常用於處理 關閉檔案、連線 等。
也就是說,如果你想快速入門Scala這麼語言,能夠去實踐開發一些小模型,資料處理邏輯,等等。那上面這7點知識,基本囊括了你短期學習的方向,而更深入的知識點,可以在後期查缺補漏,結合實際場景去調研,去學習,去使用。
六、學好Scala的核心關鍵?
這也是學習任何一門語言,甚至是手藝的通用方法,這裡很簡化去概括,更多細節需要慢慢去體會。
第一點:必要的基礎打紮實;
第二點:多尋找開發場景去實踐,目的是為了練手、遇到新問題、鍛鍊解決問題的能力;
第三點:遇到開發困難,先理清瓶頸在哪裡?再多搜尋網路資料針對性去解決;
第四點:完整去開發一個全流程的資料專案,甚至是業務場景模型,把零散知識貫穿起來;
道理可能大家都懂,但是方法一定要選擇正確,才能事半功倍。
-
3 # 程式技術員
大資料中的Scala好掌握、可以自學,我就是自學的。
IT行業程式設計師一般都要時刻保持高強度的學習,學習新的知識、新的技能,這行業的特點就是技術更新換代快,如果跟不上技術更新,缺少競爭力,很快就會被淘汰。
學習Scala需要什麼?Scala是用來開發Spark的,不是說其他語言不行,而是Scala天生就是為Spark準備的,寫起來簡單、程式碼簡潔,只要你有程式設計技術很容易上手。
跟其他語言不一樣的是,Scala是函數語言程式設計語言,函數語言程式設計也沒想象的那麼神秘。但是前提你需要有程式設計基礎,我以Java為例子,如果你有Java那麼學習Scala就會快很多。無論那麼語言,注重的是程式設計思維,再加上一顆能堅持下來的心,Scala半個月就能學會了。
怎麼學習Scala學習Scala自學就可以,在網上找資料、找影片,弄清Scala的語法和一些規範,加上長時間練習就行了。
1,先在電腦上安裝Scala的環境跟配置Java的jdk一樣的道理,有執行環境才能著手Scala的開發練習。
2,學習Scala的語法,Scala的語法和Java有一些區別。比如,集合應用、陣列應用、可變引數、函式宣告應用等等。
3,學習Scala的一些關鍵字,如Lazy、Private。如何構造Scala的單列模式,Scala的構造器、伴生物件、單列物件等。
4,學習Scala的匹配模式、樣例匹配、偏函式匹配、型別匹配、高階函式、柯里化、特質和抽象類等。
5,學習Scala的一些轉換操作,如隱式轉換,重點學一下Scala的泛型,這個跟Java差別很大。
6,最後進階學習一些Scala的Actor和Akka訊息的通訊模式。
按照上面的步驟來學習,基本就能入門Scala了,就可以使用Scala開發Spark了。
Scala的主要作用目前Scala的作用主要用在開發Spark方面,做SparkCore,SparkSql,SparkStreaming這些方面。至於其他方面,目前我還沒應用過,Scala是一門很小眾的語言,學習的人不多,不如Java和Python通用,Java和Python也可以開發Spark。
總之,大資料的Scala學起來上手還是很容易的,只要你有程式設計基礎,完全可以自己獨立自學。
-
4 # 加米穀大資料
大資料技術的學習需要掌握Scala。
不過在學習Scala之前,你最好先對Java和任一函式式語言(Haskell,SML等)有一定程度理解以後,尤其是能夠在程式設計正規化之間隨意切換以後,再去了解Scala。
Scala在大資料方向不是偏科研的,是非常多地方都會用的,比如說spark。
Scala的好處:
1, JVM base, 全面相容Java. 對於Java基礎紮實的同學, 學習Scala是很友好的;
2, 在常用工具中, Flume和Hadoop由java編寫, Spark和Kafka由Scala編寫。
所以對於想學大資料的同學而言, Scala確實是最推薦的。
Scala作為一門較新的語言,它的社群是比較混亂的。Scala社群裡有很多不同的嘗試,以Java一支和Haskell一支為主,此外還有使actor和reactive programming一派的。你如果連一個已經成熟的程式設計正規化都沒有掌握,我覺得很大可能你會吃不消Scala。
推薦書籍:《Scala程式設計》《Scala函數語言程式設計》
大資料語言Scala初識
https://www.toutiao.com/i6543924910664712718/
-
5 # 宋先生oovv
下本自學scala看看就足夠了,別聽下面那幫培訓機構扯犢子。中國沒有一家培訓機構能教你高深的技術。真想深學,上github找兩千星以前的開源專案,慢慢琢磨。
-
6 # 技術人R
如果你只是做大資料開發,比如寫 Spark 指令碼,不難,頂多就是比 Java 資料結構更豐富,外加一些 map, filter 之類的概念,自學教程一大堆。如果你的目的是做基於 Scala 生態的 Web 應用、訊息中介軟體、大資料系統,有難度,某種程度上是很難的。至於為什麼
語法非常靈活,型別系統非常先進。如果你同時掌握了一門靜態(比如Java)和一門動態(比如 Python)型別的語言,就更有體會。OOP(面向物件) 和 FP(函式式)程式設計完整融合。比如需要掌握 Functor、Applicative Funcator、Monoid、Monad 之類的概念Actor 模型以及 Akka 生態。完備的併發程式設計和分散式計算解決方案。對了,前段時間剛拿到了 Coursera 的 Funcational Program Design in Scala (Scala 函數語言程式設計設計)證書。
回覆列表
Scala是很好學習的,自學也是沒問題的,只要找對學習材料。scala也是基於Java的,但是比Java封裝層次更高,是函數語言程式設計,使用起來自然比Java更加簡潔,大大減少了程式碼量。大資料spark計算框架常用scala程式設計。也是大資料面試經常會被問到的。