close

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

555  

把123.txt load進去

val file = sc.textFile("123.txt")

sc是SparkContext的縮寫

55    

 

 所以file變成了一個RDD 我們必須用collect指令才可以看到RDD裡的東西

file.collect()

5555  

恩 好多小蘋果

由一個Array裡面包含三個字串

 

 

 

試試把各個字以空格分開

val line1 = file.map(_.split(" "))

檢查

line1.collect()

555551  

現在變成Array<Array>了

 

這個太醜了 我們不要Array裡面還有Array 使用flatMap

val line2 = file.flatMap(_.split(" "))

line2.collect()

jj  

這樣只有單純一個Array

 

 

我想要給他除了Key外還要有一組Value 又拿Map使用

val line3 = line2.map(s=> (s , 1))

line3.collect()

a  

有<Key, Value>的感覺了

 

用reduceByKey來計算字數

val line4 = line3.reduceByKey(_ + _)

line4.collect()

h  

所有字數就被統計出來了

 

 

不過這樣有點不好看所以我們加個指令

line4.collect.foreach(println)

bb  

這樣是不是比較好看了呢?

 

 

也可以把以上指令組合起來只用一行就做到以上的事

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

nn  

 

 

arrow
arrow
    全站熱搜

    kurthung1224 發表在 痞客邦 留言(0) 人氣()