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));
来源:CSDN
作者:激进的兔子
链接:https://blog.csdn.net/weixin_42749930/article/details/83540081