Spark的map和flatmap的区别

最近学习spark,然后遇到了这么一个题,有如下数据:

http://bigdata.edu360.cn/laozhang
http://bigdata.edu360.cn/laoduan
http://javaee.edu360.cn/xiaoxu

要统计最受欢迎的老师,然后我就试了一下map和flatmap这两个算子,结果如下:

flatmap的结果
在这里插入图片描述
map的结果
在这里插入图片描述
map得出的结果和我的预期一致,flatmap的结果为什么是单个的字符呢?
然后我就上网去搜资料,看到了一个不错的图(图片来源于链接
在这里插入图片描述
这里说明了flatmap是在map的基础上在做了一次flatten操作。也就是我之前map转换出来的laozhao等字符串属于可迭代的,然后在flatten的操作下变成了一个个字符,当我map转换出来的结果是数字的话,那么就不能执行flatten操作。flatten需要传入的数据类型应该是TraversableOnce类型。
在这里插入图片描述
当我转换成List类型的时候,就成功了。也就是说是flatten操作将“laozhao”等字符串压成一个个字符并返回。
在这里插入图片描述
上面map和flatmap里面用的是substring函数,以下使用split函数进行对比。
我们知道一行类似于http://bigdata.edu360.cn/laozhang的数据经过split("/")之后会返回一个数组,类似于(http:,“”,bigdata.edu.360.cn,laozhao),然后数组是可以继续被flatten的,继续flatten之后将里面的元素一个个压平,并将所有数据压平之后变成一个Array。
这也是为什么下面的图中,flatmap返回的是一个Array,而map返回的是Array[Array[]…]类型。
在这里插入图片描述
希望能帮助到大家。
本文是原创,如需转载请联系我~

猜你喜欢

转载自blog.csdn.net/a6822342/article/details/89149125