scala概述入門

由于做大數(shù)據(jù)開發(fā),使用最多的語言就是scala和python,java。 剛開始由于spark是scala開發(fā)的,就去學(xué)習(xí)了scala,然后看spark的源碼。 后面就是基于spark-core寫原生scala的應(yīng)用??傮w來時(shí), scala使用是真的絲滑和順手。尤其函數(shù)式編程。我開發(fā)flink也是使用scala。目前很少使用Java了。
我下面就系統(tǒng)介紹一下,scala的內(nèi)容學(xué)習(xí), 我自己也做一個(gè)系統(tǒng)的學(xué)習(xí)補(bǔ)充吧。

這篇主要從scala入門介紹。

scala官網(wǎng): https://www.scala-lang.org/

Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.

scala誕生

創(chuàng)始人馬丁·奧德斯基(Martin Odersky)是編譯器及編程的狂熱愛好者,長時(shí)間的編程之后,希望發(fā)明一種語言,能夠讓寫程序這樣的基礎(chǔ)工作變得高效,簡單。所以當(dāng)接觸到JAVA語言后,對(duì)JAVA這門便攜式,運(yùn)行在網(wǎng)絡(luò),且存在垃圾回收的語言產(chǎn)生了極大的興趣,所以決定將函數(shù)式編程語言的特點(diǎn)融合到JAVA中,由此發(fā)明了兩種語言(Pizza & Scala)

與java的關(guān)系

它運(yùn)行在Java虛擬機(jī)(JavaVirtualMachine)之上,輕松實(shí)現(xiàn)和豐富的Java類庫互聯(lián)互通。scala和java程序都是編譯成.class文件,然后在jvm上運(yùn)行。

所以,如果沒有java基礎(chǔ),還是建議先學(xué)java基礎(chǔ)。 scala很多實(shí)現(xiàn)機(jī)制都是在java基礎(chǔ)上實(shí)現(xiàn)的。比如,伴生對(duì)象,成員變量,靜態(tài)方法等, 這些都要反編譯 .class文件去看編譯的java代碼的。

scala語言特點(diǎn)

  • Scala是一門以java虛擬機(jī)(JVM)為運(yùn)行環(huán)境并將面向?qū)ο蠛秃瘮?shù)式編程的最佳特性結(jié)合在一起的靜態(tài)類型編程語言。
  • Scala 是一門多范式 (multi-paradigm) 的編程語言,Scala支持面向?qū)ο蠛秃瘮?shù)式編程
  • Scala源代碼(.scala)會(huì)被編譯成Java字節(jié)碼(.class),然后運(yùn)行于JVM之上,并可以調(diào)用現(xiàn)有的Java類庫,實(shí)現(xiàn)兩種語言的無縫對(duì)接。[案例演示]
  • scala單作為一門語言來看, 非常的簡潔高效 (三元運(yùn)算, ++ , --,map,reduce等)
  • Scala 在設(shè)計(jì)時(shí),馬丁·奧德斯基 是參考了Java的設(shè)計(jì)思想,可以說Scala是源于java,同時(shí)馬丁·奧德斯基 也加入了自己的思想,將函數(shù)式編程語言的特點(diǎn)融合到JAVA中, 因此,對(duì)于學(xué)習(xí)過Java的同學(xué),只要在學(xué)習(xí)Scala的過程中,搞清楚Scala 和 java相同點(diǎn)和不同點(diǎn),就可以快速的掌握Scala這門語言
  • scala像python一樣,一切皆對(duì)象。函數(shù)也是一等公民。(后面會(huì)介紹如何實(shí)現(xiàn)一切皆對(duì)象的)

注意: 這里介紹了函數(shù)式編程概念, 大家下去可以了解一下 命令式編程和函數(shù)式編程的概念和不同。

scala安裝 以及 idea集成環(huán)境配置

scala的安裝方式有很多種, 大家注意版本,比如做spark開發(fā),以及一些apache的軟件都有scala版本的要求。 注意版本匹配。

mac:

brew update
brew install scala

另一種就是下載 二進(jìn)制包 直接安裝

具體安裝以及idea配置,就不說了。我認(rèn)為你會(huì)的。

REPL環(huán)境使用

示例代碼

spark代碼

object Wd {
  def main(args: Array[String]): Unit = {
    // 配置, 運(yùn)行環(huán)境
    val sparkConf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount")

    // 上下文對(duì)象
    val sc = new SparkContext(sparkConf)

    // 讀取文件,將文件內(nèi)容一行一行的讀取出來

    // 如果從本地中使用 file://
    val lines: RDD[String] = sc.textFile("file://Users/youdi/Project/javaProject/sparkOne/input")

    val words: RDD[String] = lines.flatMap(_.split(" "))
    val wordToOne: RDD[(String, Int)] = words.map((_, 1)) // tuple 2

    // 分組聚合
    val wordSum: RDD[(String, Int)] = wordToOne.reduceByKey(_ + _)

    val array: Array[(String, Int)] = wordSum.collect()
    array.foreach(println)
  }

}

flink代碼:

package org.youdi.wc

import org.apache.flink.api.java.utils.ParameterTool
import org.apache.flink.streaming.api.scala._

object StreamWordCount {
  def main(args: Array[String]): Unit = {

    val parameters: ParameterTool = ParameterTool.fromArgs(args)
    val host: String = parameters.get("host")
    val port: Int = parameters.getInt("port")


    val env: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

    //    env.disableOperatorChaining()
    // 接收socket數(shù)據(jù)流
    val textDataStream: DataStream[String] = env.socketTextStream("localhost", 7777)

    val wordCountStream: DataStream[(String, Int)] = textDataStream.flatMap(_.split(" "))
      .filter(_.nonEmpty).disableChaining()
      .map((_, 1)).startNewChain()
      .keyBy(0)
      .sum(1)

    wordCountStream.print().setParallelism(1)

    // 打印輸出
    env.execute("stream word count job")

    //    6> (youdi,1) 線程數(shù)據(jù)
    //1> (nihao,1)
  }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容