主题:RDD的foreachPartition/foreach的操作
说明:这两个action主要用于对每个partition中的iterator时行迭代的处理.通过用户传入的function对iterator进行内容的处理.
一、foreach的操作:
foreach中,传入一个function,这个函数的传入参数就是每个partition中,每次的foreach得到的一个rdd的kv实例,也就是具体的内容,
这种处理你并不知道这个iterator的foreach什么时候结果,只能是foreach的过程中,你得到一条数据,就处理一条数据.
由下面的红色部分可以看出,foreach操作是直接调用了partition中数据的foreach操作:
def foreach(f: T => Unit): Unit = withScope {
val cleanF = sc.clean(f)
sc.runJob(this, (iter: Iterator[T]) => iter.foreach(cleanF))
}
示例说明:
val list = new ArrayBuffer()
Rdd.foreach(record => {
list += record
If (list.size >= 10000) {
list.flush
}
})
上面这段示例代码中,如果会存在一个问题,迭代的最后,list的结果可能还没有达到10000条,这个时候,
你在内部的处理的flush部分就不会执行,也就是迭代的最后如果没有达到10000的数据就会丢失.
所以在foreach中,一般就是拿到一条数据进行下处理Rdd.foreach(record => {record._1 == a return})
二、foreachPartition操作:
这个函数也是根据传入的function进行处理,但不同之处在于,这里function的传入参数是一个partition对应数据的iterator.
而不是直接使用iterator的foreach,这种情况下,如果是上面foreach的示例代码中list这个片段在这个action中就能够正常的去处理.
def foreachPartition(f: Iterator[T] => Unit): Unit = withScope {
val cleanF = sc.clean(f)
sc.runJob(this, (iter: Iterator[T]) => cleanF(iter))
}
示例代码:
Val list = new ArrayBuffer
rdd.foreachPartition(it => {
It.foreach(r => {
List += r
If (list.size > 10000) flush
})
If (list.size > 0) flush
})
最后说下这两个action的区别:
Foreach与ForeachPartition都是在每个partition中对iterator进行操作,
不同的是,foreach是直接在每个partition中直接对iterator执行foreach操作,而传入的function只是在foreach内部使用,
而foreachPartition是在每个partition中把iterator给传入的function,让function自己对iterator进行处理(可以避免内存溢出).
参考文章:http://blog.csdn.NET/u014393917/article/details/50607437
相关推荐
spark rdd函数大全。spark rdd操作为core操作,虽然后续版本主要以dataset来操作,但是rdd操作也是不可忽略的一部分。
Spark思维导图之Spark RDD.png
##### 3.1 Spark中RDD的操作 - **转换操作**:包括`map`, `flatMap`, `filter`, `reduceByKey`等。 - **行动操作**:如`count`, `first`, `take`, `saveAsTextFile`等。 - **缓存操作**:使用`cache()`或`persist()`...
spark rdd相关操作详解;包括全部的操作说明和举例;
实验中首先安装了 Spark 和其依赖项,然后通过 RDD 编程实现了 wordcount 的功能。最后,通过 Spark 编程实现了 wordcount Scala 程序,并对实验结果进行了分析。 知识点一:Spark 安装 * 在 Windows 环境下安装 ...
Spark RDD(弹性分布式数据集)是Apache Spark框架中的核心组件,它是Spark处理大规模数据的核心抽象。RDD代表了一种可容错、只读、分片的数据集合,这些分片可以分布在Spark集群的不同节点上。RDD的设计目标是提供...
在大数据处理框架Apache Spark中,RDD(弹性分布式数据集)是基础的数据处理抽象,它提供了容错、分布式数据操作的能力。而DataFrame和Dataset是Spark SQL中更高级的数据抽象,提供了更多的优化和易于使用的特点。...
- **Spark 的实现**:Spark 中的 RDD 是通过 Scala 语言实现的,并提供 Java 和 Python 等语言的 API 接口。此外,Spark 还提供了对 SQL 查询的支持以及机器学习库 MLlib。 - **用户案例与基准测试**:Spark 项目...
标题:“Spark RDD API”说明了本文档将专注于Apache Spark中弹性分布式数据集(RDD)的API。RDD是Spark的核心概念,它是一个容错的、并行的数据结构,使得用户能够处理大数据集。本文档将基于Scala语言中的RDD实现...
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。...电影评分数据汇总,(使用spark2.4+scala完成, 分析采用spark RDD的API. 数据集采用标准电影评分数据).zip
Spark中的RDD是一个不可变的分布式对象集合。每个RDD都倍分为多个分区,这些分区运行在集群中的不同节点。RDD可以包含Python、Java、Scala中任意类型的对象,甚至可以包含用户自定义对象,本文主要通过Java实现相关...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现...
课时5:Spark2sql从mysql中导入 课时6:Spark1.6.2sql与mysql数据交互 课时7:SparkSQL java操作mysql数据 课时8:Spark统计用户的收藏转换率 课时9:Spark梳理用户的收藏以及订单转换率 课时10:最终获取用户的...
Spark RDD思维导图,xmind
本文将对 Spark RDD 进行深入浅出的讲解,涵盖 Spark 的基本特性、生态体系、优势、支持的 API、运行模式、RDD 的概念和类型、容错 Lineage、缓存策略等知识点。 Spark 的基本特性 Spark 是一个高可伸缩性、高...
其中,RDD作为Spark中最基本的数据抽象,扮演着至关重要的角色。 #### RDD(Resilient Distributed Dataset) - **定义**:RDD(Resilient Distributed Dataset)即弹性分布式数据集,是Spark中最基本的数据抽象。...
Spark 的核心概念是 RDD(Resilient Distributed Datasets),这是一种高度抽象的数据结构,设计用于支持大规模数据处理。...在实际应用中,RDD 的这些特性使得 Spark 成为了处理迭代计算和交互式数据分析的理想选择。
在描述中提到的"Spark RDD以及其特性的流程图",可能是对RDD创建、转换、持久化和执行流程的可视化表示。Visio是一款常用的流程图绘制工具,用于打开和理解这个流程图,可以帮助我们更直观地掌握RDD的工作原理。 总...