文档章节

map and flatmap 区别

Faye_Cai
 Faye_Cai
发布于 2016/06/11 21:36
字数 352
阅读 38
收藏 0

map vs flatMap in Spark

September 24, 2014Big Dataexample, spark

In the previous blogs around Spark examples, RDD.flatMap() has been used. In this blog we will look at the differences between RDD.map() and RDD.flatMap().

map and flatMap are similar, in the sense they take a line from the input RDD and apply a function on it. The way they differ is that the function in map returns only one element, while function in flatMap can return a list of elements (0 or more) as an iterator.

Also, the output of the flatMap is flattened. Although the function in flatMap returns a list of elements, the flatMap returns an RDD which has all the elements from the list in a flat way (not a list).

Sounds a bit confusing. In the below code snippet, on the input lines both map and flatMap are applied and output dumped in HDFS to wordsWithMap and wordsWithFlatMap folder.

from pyspark import SparkContext sc = SparkContext("spark://bigdata-vm:7077", "Map") lines = sc.parallelize(["hello world", "hi"]) wordsWithMap = lines.map(lambda line: line.split(" ")).coalesce(1) wordsWithFlatMap = lines.flatMap(lambda line: line.split(" ")).coalesce(1) wordsWithMap.saveAsTextFile("hdfs://localhost:9000/user/bigdatavm/wordsWithMap") wordsWithFlatMap.saveAsTextFile("hdfs://localhost:9000/user/bigdatavm/wordsWithFlatMap")

1

2

3

4

5

6

7

8

9

10

from pyspark import SparkContext

 

sc = SparkContext("spark://bigdata-vm:7077", "Map")

lines = sc.parallelize(["hello world", "hi"])

 

wordsWithMap = lines.map(lambda line: line.split(" ")).coalesce(1)

wordsWithFlatMap = lines.flatMap(lambda line: line.split(" ")).coalesce(1)

 

wordsWithMap.saveAsTextFile("hdfs://localhost:9000/user/bigdatavm/wordsWithMap")

wordsWithFlatMap.saveAsTextFile("hdfs://localhost:9000/user/bigdatavm/wordsWithFlatMap")

 

The output of the map function in HDFSmap-output
The output of the flatMap function in HDFSflatMap-output

Conclusion

The input function to map returns a single element, while the flatMap returns a list of elements (0 or more). And also, the output of the flatMap is flattened.

In the case of word count, where the input line is split into multiple words, flatMap can be used. Also, in the case of weather data set, the extractData nethod will validate the record and might or might not return a value. In this case also, flatMap can be used.

Share this:

本文转载自:http://www.dattamsha.com/2014/09/map-vs-flatmap-spark/

Faye_Cai
粉丝 0
博文 28
码字总数 5590
作品 0
海淀
高级程序员
私信 提问
RxJava 中的map与flatMap

、map和flatMap都是接受一个函数作为参数(Func1) 2、map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1的call方法对I类型进行处理后返回O类型...

丁佳辉
2018/08/30
39
0
spark快速大数据分析之读书笔记-flatmap与map的区别

以前总是分不清楚spark中flatmap和map的区别,现在弄明白了,总结分享给大家,先看看flatmap和map的定义。 map()是将函数用于RDD中的每个元素,将返回值构成新的RDD。 flatmap()是将函数应用...

sucre
2016/02/23
4.6K
2
spark 的rdd的函数中 flatMap 在项目中的意义和场景作用?

flatMap 与map类似,区别是原RDD中的元素经map处理后只能生成一个元素,而原RDD中的元素经flatmap处理后可生成多个元素来构建新RDD。 举例:对原RDD中的每个元素x产生y个元素(从1到y,y为元...

知行合一1
2017/02/15
191
0
Java 8引入了一个新的Optional类的详细使用

新版本的Java,比如Java 8引入了一个新的Optional类。Optional类的Javadoc描述如下: 这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。 ...

weiliu007
2016/09/13
296
0
swift, Array的高阶函数:flatMap 和 compactMap

flatMap: 对数组的每一个元素做一次处理,返回处理后的数组。 与map的区别是: 返回后的数组中不存在nil, 同时也会把Optional解包。 函数声明: @available(swift, deprecated: 4.1, renam...

小曼Study
01/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot2单元测试

引入maven依赖 引入powermock是为了解决静态方法mock的问题。 <dependency> <groupId>org.powermock</groupId> <artifactId>powermock-module-junit4</artifactId> <version>2.......

一刀
12分钟前
1
0
webpack优化公司内部分享ppt小记

Webpack整个的构建过程是基于事件流 Webpack 就像一条生产线,要经过一系列处理流程后才能将源文件转换成输出结果。 这条生产线上的每个处理流程的职责都是单一的,多个流程之间有存在依赖关...

莫西摩西
13分钟前
1
0
DevOps落地实践,BAT系列,敏捷看板

DevOps 自 2009 年诞生以来,至今整整过去了十年,从最初的摸索,逐步变成一种主流的软件开发交付模式。BAT在2014年左右,甚至更早的时候,内部的DevOps系统就已经差不多成型了,比如腾讯的织...

cs平台
17分钟前
2
0
Stylus 简单应用

1、安装 cnpm install stylus 2、基本语法 stylus中文版参考文档 3、命令行下编译 styl 文件,生成压缩的css文件 编译src目录下styl文件 stylus --compress /src 更多命令可以执行查找 styl...

微笑吔彷徨
18分钟前
2
0
Java正则表达式大全

1、匹配中文:[\u4e00-\u9fa5] 2、英文字母:[a-zA-Z] 3、数字:[0-9] 4、匹配中文,英文字母和数字及下划线:^[\u4e00-\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度: [\u4e00-\u9fa5_a-zA-Z0-9_]{4...

叶湘伦
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部