使用sbt建立scala程式 - twilighthook/BigDataNote GitHub Wiki

在spark上我們會提交scala程式到上面執行 若是要測試scala檔案的話可以使用Maven或是sbt 這篇就讓我們來介紹使用sbt吧

sbt安裝


echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
sudo apt-get update
sudo apt-get install sbt

安裝之後可以到

System Settings -> Software & Updates -> Other Software

看安裝的sbt是否有在列表上


第一個scala程式

在寫程式前先安裝spark和scala(sudo apt-get install scala)稍等會用到 安裝完成後到要使用的工作位置 創建一個檔案:build.sbt 這個檔案是在做sbt專案初始化時的一個需求檔案 裡面的內容如下

lazy val root = (project in file("."))
  .settings(

        name := "test",
        version := "0.0.1",
        scalaVersion := "2.11.6",
        crossTarget := baseDirectory.value / ".",

        // additional libraries
        libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
)

設置了專案名稱、專案版本、scala版本、jar檔生成地點、spark-core lib的位置


接下來我們要建立的是專案的資料路徑

mkdir src src/main src/main/scala src/test src/test/scala

然後建立第一個scala程式,我們這邊用wordCount的程式做例子

sudo vim src/main/scala/test.scala
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._

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

    val inputFile = args(0)
    val outputFile = args(1)

    //create a SparkContext object
    val conf = new SparkConf().setMaster("local").setAppName("MyApp")
    val sc = new SparkContext(conf)

    //load the input data
    val input = sc.textFile(inputFile)

    // Split up into words.
    val words = input.flatMap(line => line.split(" "))
    
    // Transform into word and count.
    val counts = words.map(word => (word, 1)).reduceByKey { case (x, y) => x + y }
    
    // Save the word count back out to a text file, causing evaluation.
    counts.saveAsTextFile(outputFile)

  }
}

建立之後可以進行第一次的sbt(若無權限要加sudo)

sudo sbt

進到sbt console他會依據你的build.sbt做初始化,之後再console輸入

compiler

目的是將scala檔做編譯 接下來再輸入

runMain test [one.txt](https://github.com/twilighthook/BigDataNote/blob/master/Spark/one.txt) result

之後看到console顯示success 會在此目錄底下出現一個result的資料夾 裡面就有success的訊息和結果了

(banana,4)
(hello,2)
(apple,3)        

而要在Spark執行scala就要先把專案打包成jar在丟到Spark環境執行

spark-submit --class {class-path.name} {jar-path} {input1} {input2}