Spark之中map與flatMap的區(qū)別
一直不太明白spark之中map與flatMap之間的區(qū)別呕寝。map的作用很容易理解就是對(duì)rdd之中的元素進(jìn)行逐一進(jìn)行函數(shù)操作映射為另外一個(gè)rdd厅克。flatMap的操作是將函數(shù)應(yīng)用于rdd之中的每一個(gè)元素苏揣,將返回的迭代器的所有內(nèi)容構(gòu)成新的rdd霉晕。通常用來(lái)切分單詞。
區(qū)別1: flatMap返回的是迭代器中的元素。
上面的例子說(shuō)明對(duì)于傳遞給flatMap的函數(shù)返回的類(lèi)型是一個(gè)可迭代的類(lèi)型(例如list)茄袖。
現(xiàn)在比較一下map和flatMap接收返回值為可迭代類(lèi)型的函數(shù)的區(qū)別:
上例說(shuō)明對(duì)于返回可迭代類(lèi)型的函數(shù)map與flatMap的區(qū)別在于:
map函數(shù)會(huì)對(duì)每一條輸入進(jìn)行指定的操作,然后為每一條輸入返回一個(gè)對(duì)象嘁锯;而flatMap函數(shù)則是兩個(gè)操作的集合——正是“先映射后扁平化”:
操作1:同map函數(shù)一樣:對(duì)每一條輸入進(jìn)行指定的操作宪祥,然后為每一條輸入返回一個(gè)對(duì)象
操作2:最后將所有對(duì)象合并為一個(gè)對(duì)象