使用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}