1. 程式人生 > >spark map flatMap

spark map flatMap

使用說明

在使用時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返回的個數則是不同的。請參考下圖進行理解: