Spark中用Scala和java開發(fā)有什么區(qū)別?
很高興回答你的問題:
由于Spark是由Scala開發(fā)的所以大家在開發(fā)Spark應用程序的時候多數(shù)會選擇Scala語言,不過Spark官方網站中也給出了用java實現(xiàn)的實例。
1、構建系統(tǒng)的選擇,sbt更合適用來構建Scala工程,maven更合適用來構建Java工程。
2、對于spark中的API來說,Java和Scala有差別,但差別并不大。
3、如果用Scala開發(fā)spark原型程序,可以用spark-shell“打草稿”,或者直接使用spark-shell做交互式實時查詢。
4、用Scala代碼量將減少甚至一個數(shù)量級,不過Scala的使用門檻較高
5、Scala 開發(fā)效率更高,代碼更精簡。
6、使用Spark過程中出現(xiàn)異常情況,在排查時如果對Spark源碼比較熟悉,可以事半功倍。
7、另外Spark基本使用函數(shù)式編程,使用Java的話可能需要寫一大堆匿名類,而Scala只需要一個lambda表達式。
8、Java不支持自動類型推導,RDD類基本都是范型,聲明時需要寫一串類類型,而Scala基本可以省略變量類型。
綜上所述:
就個人體會來說,Scala相對于Java的優(yōu)勢是巨大的。熟悉Scala之后再看Java代碼,有種讀匯編的感覺……
另外,如果喜歡,可以混合Java和Scala,因為二者最終都是編譯成class文件,使用Scala能夠隨意調用Java實現(xiàn)的類和方法。
從表面上看,無論采用哪種語言,都能完成一樣的功能,只是代碼量有多有少,開發(fā)人員根據(jù)自己的情況選擇使用Java還是Scala都可。
據(jù)說目前最新的Java 8已經支持函數(shù)式接口了,Java 9也將推出Java Shell功能,慢慢地會變得和Scala一樣簡潔。