flatmap和map的区别(以Spark的WordCount为例)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36710456/article/details/85334562
/* 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操作。

猜你喜欢

转载自blog.csdn.net/sinat_36710456/article/details/85334562
今日推荐