使用Spark前最好先學Scala 不然很多程式碼都看不懂 雖然他也支援JAVA和Python 但原生的code仍是使用Scala
首先我在spark目錄下建立一個123.txt
內容是
You are my little little apple
You are my little little apple
You are my little little apple
You are my little little apple
You are my little little apple
使用spark-shell進入互動模式
linux下使用bin/spark-shell
windows下使用bin\spark-shell.cmd 記住windows目錄是用反斜線
出現scala
把123.txt load進去
val file = sc.textFile("123.txt")
sc是SparkContext的縮寫
所以file變成了一個RDD 我們必須用collect指令才可以看到RDD裡的東西
file.collect()
恩 好多小蘋果
由一個Array裡面包含三個字串
試試把各個字以空格分開
val line1 = file.map(_.split(" "))
檢查
line1.collect()
現在變成Array<Array>了
這個太醜了 我們不要Array裡面還有Array 使用flatMap
val line2 = file.flatMap(_.split(" "))
line2.collect()
這樣只有單純一個Array
我想要給他除了Key外還要有一組Value 又拿Map使用
val line3 = line2.map(s=> (s , 1))
line3.collect()
有<Key, Value>的感覺了
用reduceByKey來計算字數
val line4 = line3.reduceByKey(_ + _)
line4.collect()
所有字數就被統計出來了
不過這樣有點不好看所以我們加個指令
line4.collect.foreach(println)
這樣是不是比較好看了呢?
也可以把以上指令組合起來只用一行就做到以上的事
val line5 = file.flatMap(_.split(" ")).map(s => (s,1)).reduceByKey(_ + _)
輸出與line4相同
寫成函數 讓他輸出與line4.collect.foreach(println)相同
def _line5(): Unit = {
val line5 = file.flatMap(_.split(" ")).map(s => (s,1)).reduceByKey(_ + _)
line5.foreach(println)
}
呼叫它
_line5