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返回的个数则是不同的。请参考下图进行理解:

猜你喜欢

转载自blog.csdn.net/qq_33283716/article/details/82113607
今日推荐