Spark 中 map 与 flatMap 的区别

通过一个实验来看Spark 中 map 与 flatMap 的区别。

步骤一:将测试数据放到hdfs上面

hadoopdfs -put data1/test1.txt /tmp/test1.txt

该测试数据有两行文本:

步骤二:在Spark中创建一个RDD来读取hdfs文件/tmp/test1.txt

步骤三:查看map函数的返回值

得到map函数返回的RDD:

查看map函数的返回值——文件中的每一行数据返回了一个数组对象

步骤四:查看flatMap函数的返回值

得到flatMap函数返回的RDD:

查看flatMap函数的返回值——文件中的所有行数据仅返回了一个数组对象

总结:

- Spark 中 map函数会对每一条输入进行指定的操作,然后为每一条输入返回一个对象;

- 而flatMap函数则是两个操作的集合——正是“先映射后扁平化”:

操作1:同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个对象

操作2:最后将所有对象合并为一个对象

时间: 2024-09-30 10:11:10

Spark 中 map 与 flatMap 的区别的相关文章

Spark中map与flatMap

map将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回 map函数的源码: def map(self, f, preservesPartitioning=False): """ Return a new RDD by applying a function to each element of this RDD. >>> rdd = sc.parallelize(["b", "a", &quo

spark中map与mapPartitions区别

在spark中,map与mapPartitions两个函数都是比较常用,这里使用代码来解释一下两者区别 import org.apache.spark.{SparkConf, SparkContext} import scala.collection.mutable.ArrayBuffer object MapAndPartitions { def main(args: Array[String]): Unit = { val sc = new SparkContext(new SparkCon

Spark入门(四)--Spark的map、flatMap、mapToPair

spark的RDD操作 在上一节Spark经典的单词统计中,了解了几个RDD操作,包括flatMap,map,reduceByKey,以及后面简化的方案,countByValue.那么这一节将介绍更多常用的RDD操作,并且为每一种RDD我们分解来看其运作的情况. spark的flatMap flatMap,有着一对多的表现,输入一输出多.并且会将每一个输入对应的多个输出整合成一个大的集合,当然不用担心这个集合会超出内存的范围,因为spark会自觉地将过多的内容溢写到磁盘.当然如果对运行的机器的内

理解Swift中map 和 flatMap对集合的作用

map和flatMap是函数式编程中常见的概念,python等语言中都有.借助于 map和flapMap 函数可以非常轻易地将数组转换成另外一个新数组. map函数可以被数组调用,它接受一个闭包作为參数,作用于数组中的每一个元素.闭包返回一个变换后的元素.接着将全部这些变换后的元素组成一个新的数组. 简单的说. map就是映射函数,把一个集合映射成还有一个集合. Swift的flatMap不easy理解,flatMap非常像map函数,可是它摒弃了那些值为nil的元素. flatMap是在处理一

spark中map和mapPartitions算子的区别

区别: 1.map是对rdd中每一个元素进行操作 2.mapPartitions是对rdd中每个partition的迭代器进行操作 mapPartitions优点: 1.若是普通map,比如一个partition中有一万条数据,那么function要执行一万次,而使用mapPartions,一个task只执行一次function,function一次接收所有数据,只执行一次,性能高 2.若在map中需要频繁创建额外对象(如将rdd的数据通过jdbc写入数据库,map需要为每条数据创建一个链接,m

spark之map与flatMap区别

scala> val m = List(List("a","b"),List("c","d")) m: List[List[String]] = List(List(a, b), List(c, d)) scala> m.flatten res8: List[String] = List(a, b, c, d) scala> val n = List(List(1,2),List(3,4)) n: List[

JavaScript中Map和ForEach的区别

译者按: 惯用Haskell的我更爱map. 原文: JavaScript?-?Map vs. ForEach - What's the difference between Map and ForEach in JavaScript? 译者: Fundebug 为了保证可读性,本文采用意译而非直译.另外,本文版权归原作者所有,翻译仅用于学习. 如果你已经有使用JavaScript的经验,你可能已经知道这两个看似相同的方法:Array.prototype.map()和Array.prototyp

Spark中repartition和partitionBy的区别

repartition 和 partitionBy 都是对数据进行重新分区,默认都是使用 HashPartitioner,区别在于partitionBy 只能用于 PairRDD,但是当它们同时都用于 PairRDD时,结果却不一样: 不难发现,其实 partitionBy 的结果才是我们所预期的,我们打开 repartition 的源码进行查看: /** * Return a new RDD that has exactly numPartitions partitions. * * Can

JS中map()与forEach()的区别和用法

相同点: 1.都是循环遍历数组中的每一项 2.每次执行匿名函数都支持三个参数,参数分别为item(当前每一项),index(索引值),arr(原数组) 3.匿名函数中的this都是指向window 4.只能遍历数组 不同点: map() map方法返回一个新的数组,数组中的元素为原始数组调用函数处理后的值 也就是map()进行处理之后返回一个新的数组 ??注意:map()方法不会对空数组进行检测 map方法不会改变原始数组 var arr = [0,2,4,6,8];var str = arr.