`
m635674608
  • 浏览: 5028193 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

spark RDD中foreachPartition和foreach说明

 
阅读更多

主题:RDD的foreachPartition/foreach的操作

 

说明:这两个action主要用于对每个partition中的iterator时行迭代的处理.通过用户传入的functioniterator进行内容的处理.

一、foreach的操作:

foreach,传入一个function,这个函数的传入参数就是每个partition,每次的foreach得到的一个rddkv实例,也就是具体的内容,

这种处理你并不知道这个iteratorforeach什么时候结果,只能是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.

而不是直接使用iteratorforeach,这种情况下,如果是上面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的区别:

ForeachForeachPartition都是在每个partition中对iterator进行操作,

不同的是,foreach是直接在每个partition中直接对iterator执行foreach操作,而传入的function只是在foreach内部使用,

foreachPartition是在每个partition中把iterator给传入的function,function自己对iterator进行处理(可以避免内存溢出).

 

 

参考文章:http://blog.csdn.NET/u014393917/article/details/50607437

分享到:
评论

相关推荐

    sparkRDD函数大全

    spark rdd函数大全。spark rdd操作为core操作,虽然后续版本主要以dataset来操作,但是rdd操作也是不可忽略的一部分。

    Spark思维导图之Spark RDD.png

    Spark思维导图之Spark RDD.png

    spark RDD 论文 中文版

    ##### 3.1 Spark中RDD的操作 - **转换操作**:包括`map`, `flatMap`, `filter`, `reduceByKey`等。 - **行动操作**:如`count`, `first`, `take`, `saveAsTextFile`等。 - **缓存操作**:使用`cache()`或`persist()`...

    spark rdd 操作详解

    spark rdd相关操作详解;包括全部的操作说明和举例;

    大数据实验报告Windows环境下安装Spark及RDD编程和Spark编程实现wordcount.doc

    实验中首先安装了 Spark 和其依赖项,然后通过 RDD 编程实现了 wordcount 的功能。最后,通过 Spark 编程实现了 wordcount Scala 程序,并对实验结果进行了分析。 知识点一:Spark 安装 * 在 Windows 环境下安装 ...

    spark rdd 论文翻译_中文_spark老汤

    Spark RDD(弹性分布式数据集)是Apache Spark框架中的核心组件,它是Spark处理大规模数据的核心抽象。RDD代表了一种可容错、只读、分片的数据集合,这些分片可以分布在Spark集群的不同节点上。RDD的设计目标是提供...

    spark rdd api dataframe 以及dataframe rdd dataset 相互转换 spark sql

    在大数据处理框架Apache Spark中,RDD(弹性分布式数据集)是基础的数据处理抽象,它提供了容错、分布式数据操作的能力。而DataFrame和Dataset是Spark SQL中更高级的数据抽象,提供了更多的优化和易于使用的特点。...

    spark RDD 论文

    - **Spark 的实现**:Spark 中的 RDD 是通过 Scala 语言实现的,并提供 Java 和 Python 等语言的 API 接口。此外,Spark 还提供了对 SQL 查询的支持以及机器学习库 MLlib。 - **用户案例与基准测试**:Spark 项目...

    spark-rdd-APi

    标题:“Spark RDD API”说明了本文档将专注于Apache Spark中弹性分布式数据集(RDD)的API。RDD是Spark的核心概念,它是一个容错的、并行的数据结构,使得用户能够处理大数据集。本文档将基于Scala语言中的RDD实现...

    电影评分数据汇总(使用spark2.4+scala, 分析采用spark RDD的API. 数据集采用标准电影评分数据).zip

    【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。...电影评分数据汇总,(使用spark2.4+scala完成, 分析采用spark RDD的API. 数据集采用标准电影评分数据).zip

    Spark学习--RDD编码

    Spark中的RDD是一个不可变的分布式对象集合。每个RDD都倍分为多个分区,这些分区运行在集群中的不同节点。RDD可以包含Python、Java、Scala中任意类型的对象,甚至可以包含用户自定义对象,本文主要通过Java实现相关...

    Spark RDD 练习作业(选择部分数据(可以是自拟,可以是采集的,也可以是现有的),进行多角度数据统计及分析).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现...

    Spark机器学习视频第4课.SparkRDD原理剖析

    课时5:Spark2sql从mysql中导入 课时6:Spark1.6.2sql与mysql数据交互 课时7:SparkSQL java操作mysql数据 课时8:Spark统计用户的收藏转换率 课时9:Spark梳理用户的收藏以及订单转换率 课时10:最终获取用户的...

    SparkRDD.xmind

    Spark RDD思维导图,xmind

    spark rdd 实战 ,基本语法

    本文将对 Spark RDD 进行深入浅出的讲解,涵盖 Spark 的基本特性、生态体系、优势、支持的 API、运行模式、RDD 的概念和类型、容错 Lineage、缓存策略等知识点。 Spark 的基本特性 Spark 是一个高可伸缩性、高...

    sparkrdd的讲解

    其中,RDD作为Spark中最基本的数据抽象,扮演着至关重要的角色。 #### RDD(Resilient Distributed Dataset) - **定义**:RDD(Resilient Distributed Dataset)即弹性分布式数据集,是Spark中最基本的数据抽象。...

    Spark RDD.docx

    Spark 的核心概念是 RDD(Resilient Distributed Datasets),这是一种高度抽象的数据结构,设计用于支持大规模数据处理。...在实际应用中,RDD 的这些特性使得 Spark 成为了处理迭代计算和交互式数据分析的理想选择。

    Spark RDD以及其特性.rar_RDD_Spark!_parallelbwz_spark_特性

    在描述中提到的"Spark RDD以及其特性的流程图",可能是对RDD创建、转换、持久化和执行流程的可视化表示。Visio是一款常用的流程图绘制工具,用于打开和理解这个流程图,可以帮助我们更直观地掌握RDD的工作原理。 总...

Global site tag (gtag.js) - Google Analytics