Spark中map和flatMap的区别

痞子三分冷 提交于 2019-12-07 20:37:18

Map和flatMap的区别

Transformation 含义
map(func) 返回一个新的RDD,该RDD由每一个输入元素经过func函数转换后组成
flatMap(func) 类似于map,但是每一个输入元素可以被映射为0或多个输出元素(所以func应该返回一个序列,而不是单一元素)

map

map()的返回值类型不需要和输入类型一样.这样如果由一个字符串RDD,并且我们的map()函数是用来把字符串解析并返回一个Double的值的,那么此时我们的输入RDD类型就是 RDD[String],而输出类型就是 RDD[Double]
eg:

//Scala版计算RDD中各值的平方
val input = sc.parallelize(List(1,2,3,4))
val result = input.map(_ * _)
println(result.collect().mkString(","))

flatMap

我们希望对每个输入元素生成多个输出元素,实现该功能的操作叫做flatMap(). 和map()类似,我们提供给flatMap()的函数被分别应用到了输入RDD的每个元素上.不过返回的不是一个元素,而是一个返回值序列的迭代器.
eg:

//Scala中的flatMap()将行数据切分为单词
val lines = sc.parallelize(List("hello world","hi"))
val words= lines.flatMap(_.split(" "))
words.first() 
//返回"hello"

引用Saprk快速大数据分析-P31
flatMap就是将原来RDD中的每一个元素通过函数func转换为新的函数,并将生成的新的RDD的每个集合中的元素合并为一个集合,内部实现了一个FlatMappedRDD(this , sc.clean(func));

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!