flatMap与map的区别

通过实验来区别flatMap和map:

1.首先编辑测试文件:

vim test.txt

文件内容为:

file content

2.将测试文件上传到HDFS上:

hdfs dfs -put test.txt /tmp

其中,test.txt为上一步编辑的测试文件,/tmp表示HDFS上的目录,要保证你的HDFS上有该目录,若没有该目录的话,则需要通过以下命令去创建:

hdfs dfs -mkdir /tmp

可以通过Hadoop提供的图形界面查看你的HDFS上是否拥有该/tmp目录,在浏览器中输入http://localhost:50070/explorer.html#/,注意此处我的Hadoop是伪分布式安装在本地,你可以将localhost:50070替换为自己Hadoop的主机地址和端口号。可以看到目录列表倒数第四行已经存在tmp目录:

flatMap与map的区别_第1张图片

在该页面上点击tmp进入该目录,注意到目录列表中已经存在刚才上传的文件test.txt:

flatMap与map的区别_第2张图片

3.在Shell中输入spark-shell:

flatMap与map的区别_第3张图片

然后在Spark中创建一个RDD来读取HDFS上的文件/tmp/test.txt:

first

4.查看map函数的返回值:

首先得到map函数返回的RDD:

second

接着通过collect查看返回的值——文件中的每一行数据返回一个数组对象,这些数组对象再组成一个数组对象,相当于一个二维数组:

third

5.查看flatMap函数的返回值:

首先得到flatMap函数返回的RDD:

first

接着通过collect查看返回的值——文件中得所有行数据仅返回一个数组对象:

second

6.总结:

  • map函数会对每一条输入进行指定的操作,然后每一条输入返回一个对象;
  • flatMap函数则是两个操作的集合,即先映射再扁平化:i.同map函数一样,对每一条输入进行指定的操作,然后为每一条输入返回一个对象;ii.然后将所有对象合并成一个对象。

你可能感兴趣的:(Spark)