flatMap与map的区别

本文通过实验对比了flatMap与map在Spark中的使用差异。通过具体的测试文件及步骤,展示了这两种函数如何处理数据,揭示了它们在返回值上的不同:map返回的是多组数据,而flatMap则返回扁平化的单一数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过实验来区别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目录:

hdfs list

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

hdfs tmp test.txt

3.在Shell中输入spark-shell:

spark-shell

然后在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.然后将所有对象合并成一个对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值