通过实验来区别flatMap和map:
1.首先编辑测试文件:
文件内容为:
2.将测试文件上传到HDFS上:
其中,test.txt为上一步编辑的测试文件,/tmp表示HDFS上的目录,要保证你的HDFS上有该目录,若没有该目录的话,则需要通过以下命令去创建:
可以通过Hadoop提供的图形界面查看你的HDFS上是否拥有该/tmp目录,在浏览器中输入http://localhost:50070/explorer.html#/,注意此处我的Hadoop是伪分布式安装在本地,你可以将localhost:50070替换为自己Hadoop的主机地址和端口号。可以看到目录列表倒数第四行已经存在tmp目录:
在该页面上点击tmp进入该目录,注意到目录列表中已经存在刚才上传的文件test.txt:
3.在Shell中输入spark-shell:
然后在Spark中创建一个RDD来读取HDFS上的文件/tmp/test.txt:
4.查看map函数的返回值:
首先得到map函数返回的RDD:
接着通过collect查看返回的值——文件中的每一行数据返回一个数组对象,这些数组对象再组成一个数组对象,相当于一个二维数组:
5.查看flatMap函数的返回值:
首先得到flatMap函数返回的RDD:
接着通过collect查看返回的值——文件中得所有行数据仅返回一个数组对象:
6.总结:
- map函数会对每一条输入进行指定的操作,然后每一条输入返回一个对象;
- flatMap函数则是两个操作的集合,即先映射再扁平化:i.同map函数一样,对每一条输入进行指定的操作,然后为每一条输入返回一个对象;ii.然后将所有对象合并成一个对象。
来源:CSDN
作者:universe_ant
链接:https://blog.csdn.net/universe_ant/article/details/52199323