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

/* 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操作。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sinat_36710456

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值