spark map flatMap
阿新 • • 發佈:2018-11-08
使用說明
在使用時map會將一個長度為N的RDD轉換為另一個長度為N的RDD;而flatMap會將一個長度為N的RDD轉換成一個N個元素的集合,然後再把這N個元素合成到一個單個RDD的結果集。
比如一個包含三行內容的資料檔案“word.md”。
a a b
c
經過以下轉換過程
val textFile = sc.textFile("word.md")
textFile.flatMap(_.split(" "))
其實就是經歷了以下轉換
["a b c", "", "d"] => [["a","a","b"],[],["c"]] => ["a","a","b","c"]
在這個示例中,flatMap就把包含多行資料的RDD,即[“a b c”, “”, “d”]
,轉換為了一個包含多個單詞的集合。實際上,flatMap相對於map多了的是[[“a”,”a”,”b”],[],[“c”]] => [“a”,”a”,”b”,”c”]
這一步。
區別對比
map(func)函式會對每一條輸入進行指定的func操作,然後為每一條輸入返回一個物件;而flatMap(func)也會對每一條輸入進行執行的func操作,然後每一條輸入返回一個相對,但是最後會將所有的物件再合成為一個物件;從返回的結果的數量上來講,map返回的資料物件的個數和原來的輸入資料是相同的,而flatMap返回的個數則是不同的。請參考下圖進行理解: