/* wordcount.txt
張三 李四
王五 趙六
張三
張三
*/
val rdd = sc.textFile("wordcount.txt")
.flatMap(x=>x.split(" "))
.map(x=>(x,1))
.reduceByKey(_+_)
注意:flatmap與map的先後順序(先flatmap後map)
否則:報錯 Cannot use map-sidecombining with array keys
疑惑:可以看先用了flatmap,然後再用的map。那這之間有什麼差別呢?
原因分析:
1、行與行之間的分隔符也是 " "
2、flatmap是将整個檔案的單詞整合起來成為一個list;map是将每一行的單詞整合起來成為一個list 。
差別對比:
1. map(func)函數會對每一條輸入進行指定的func操作,然後為每一條輸入傳回一個對象;
2. 而flatMap(func)也會對每一條輸入進行執行的func操作,然後每一條輸入傳回一個對象,但是最後會将所有的對象再合成為一個對象;
3. 從傳回的結果的數量上來講,map傳回的資料對象的個數和原來的輸入資料是相同的,而flatMap傳回的個數則是不同的。
請參考下圖進行了解:
通過上圖可以看出,flatMap其實比map多的就是flatten操作。