Spark的flatMap和Map的区别

本文探讨了Spark中的flatMap和map两种转换操作的区别。在背景部分,介绍了这两个函数的基本概念;在测试环节,通过实例展示了它们在处理数据时的行为差异;最后,得出结论,强调flatMap常用于扁平化操作,而map则用于一对一的映射转换。

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

背景:

在学习spark的时候,有一个开篇的例子中有两句代码如下所示:

val input = sc.textFile(inputFile) 
val words = input.flatMap(line=>line.split(" "))

     上面两句的意思是,输入一个文件,然后以单空格作为将每一行的输入划分为单词s。
     另外,在Spark提供的API中也有关于Map函数的用法,两个函数的解释如下:

                                   

                                       

      究竟这两个函数有什么区别呢,接下来就一探究竟。

测试:

      Sorry, I do not know why the law of input in Chinese can not work suddenly. So , then I will write the rest of the article in my shit English. 
       First, let's test flatMap function, the picture as follow.
                      
     Ok,输入法的病好了,可以不再为装比找打的事烦恼了。。。
     在上面的实例中,我保存了flatMap之后的文件,上图左边是在控制台上输出的结果,右边是文件中的内容吧。
     在文件中看到了词被分开了,在控制台上看到了一个数组Array下的单词集。

     接下来,再看一下Map操作。
               
                
        上图的左边是在控制台上的输出,右图是在文件的内容。

结论:

       map之后collect的结果是Array[Array[String]],每一行的处理都会产生一个Array对象,里面的元素是每一行的单词。所以,保存在文件中的是,每一行输入的Array对象。
       flatMap之后的collect的结果是Array[String],其实是先map后flat的过程。先map产生了Array[Array[String]],然后又经过flat合并成了Array[String]。在文件中保存的结果是每一个分割后的单词。
             





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值