經典就是用來重復的
步驟1:
把數據文件上傳到Linux或者是上傳到hdfs 上
步驟2:
加載數據文件 python
val?? line =sc.textFile("file:///home/data/word.txt")
使用RDD 數據集對數據處理
val wordcount=lines.flatMap(line=>line.split(" ")).map(word=>(word,1)).reduceByKey((a,b)=>a+b)
wordcount.collect()
解釋一下:textFile.flatMap(line.spilt(" ")
1........會遍歷textFile中的每行文本內容。當遍歷一行文本內容完成時。會把文本內容賦值給變量line.
2.......執行lamda表達式line=>line.split(" ")
這個是表達式,左邊表示輸入參數,右邊表示函數里面執行的處理邏輯,這里執行line.split(" "),也就是針對line中的一行文本內容,采用空格作為分隔符進行單詞切分,從一行文本切分得到很多個單詞構成的單詞集合。這樣,對于textFile中的每行文本,都會使用Lamda表達式得到一個單詞集合,最終,多行文本,就得到多個單詞集合
3...........textFile.flatMap()操作就把這多個單詞集合“拍扁”得到一個大的單詞集合。
4.............然后,針對這個大的單詞集合,執行map()操作,也就是map(word => (word, 1)),這個map操作會遍歷這個集合中的每個單詞,當遍歷到其中一個單詞時,就把當前這個單詞賦值給變量word,并執行Lamda表達式word => (word, 1),這個Lamda表達式的含義是,word作為函數的輸入參數,然后,執行函數處理邏輯,這里會執行(word, 1),也就是針對輸入的word,構建得到一個tuple,形式為(word,1),key是word,value是1(表示該單詞出現1次)。
5..............程序執行到這里,已經得到一個RDD,這個RDD的每個元素是(key,value)形式的tuple。最后,針對這個RDD,執行reduceByKey((a, b) => a + b)操作,這個操作會把所有RDD元素按照key進行分組,然后使用給定的函數(這里就是Lamda表達式:(a, b) => a + b),對具有相同的key的多個value進行reduce操作,返回reduce后的(key,value),比如("hadoop",1)和("hadoop",1),具有相同的key,進行reduce以后就得到("hadoop",2),這樣就計算得到了這個單詞的詞頻。
?