Spark的RDD五大特性_spark在rdd中的特征_huanglongdejia的博客-程序员秘密

技术标签: spark  

RDD,弹性分布式数据集,是一种提供了许多操作的数据集合,具有五大特性:

1.A list of partitions

RDD是一个由多个partition(某个节点里的某一片连续的数据)组成的的List;将数据加载为RDD时,一般一个hdfs里的block会加载为一个partition。

2.A function for computing each split

RDD的每个partition上面都会有function,也就是函数应用,其作用是实现RDD之间partition的转换。

3.A list of dependencies on other RDDs

RDD会记录它的依赖 ,为了容错,也就是说在内存中的RDD操作时出错或丢失会进行重算。

4.Optionally,a Partitioner for Key-value RDDs

可选项,如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,例如这里自定义的Partitioner是基于key进行分区,那则会将不同RDD里面的相同key的数据放到同一个partition里面

5.Optionally, a list of preferred locations to compute each split on

最优的位置去计算,也就是数据的本地性。

RDD主要有两大操作:转换(Transformations)和操作(Actions):

Transformations

Transformation 描述
map(func) 通过应用一个函数的所有元素,返回一个新的分布式数据集
filter(func) 通过选择函数返回true的那些元素来形成,返回一个新的数据集
flatMap(func) 与map类似,但每个输入项都可以映射到0个或多个输出项(因此函数应该返回一个序列而不是单个项)
mapPartitions(func) 与map类似,但运行在RDD的每个分区(块),所以函数必须是迭代器Iterator => Iterator,当运行在一个类型T的RDD
mapPartitionsWithIndex(func) 与mapPartitions类似,但也为函数提供一个表示分区索引的整数值,所以函数必须是(Int, Iterator) => Iterator类型当运行在一个类型T的RDD
sample(withReplacement, fraction, seed) 使用给定随机数字生成器的种子,对数据的一小部分进行采样,无论有无替换
union(otherDataset) 返回一个新的数据集,其中包含源数据集和参数中的元素的联合
intersection(otherDataset) 返回一个新的RDD,它包含源数据集和参数中的元素的交集
distinct([numTasks])) 返回一个包含源数据集的不同元素的新数据集
groupByKey([numTasks]) 当调用一个(K, V)对的数据集时,返回一个(K, 可迭代的)对的数据集。注意:如果要对每个键执行聚合(如汇总或平均值),使用简化的方法或聚合键将会获得更好的性能。注意:在默认情况下,输出的并行度取决于父RDD分区的数量,你可以通过一个可选的numTasks参数来设置不同数量的任务。
reduceByKey(func, [numTasks]) 当调用(K, V)的数据集对,返回一个数据集(K, V)对每个键的值在哪里聚合使用给定减少函数func,必须(V, V) => V形似groupByKey,减少任务的数量通过一个可选的第二个参数是可配置的。
aggregateByKey(zeroValue)(seqOp, combOp, [numTasks]) 当调用一个(K, V)对的数据集时,返回一个(K, U)对的数据集,其中每个键的值使用给定的组合函数和一个中立的“零”值进行聚合。允许一个与输入值类型不同的聚合值类型,同时避免不必要的分配。与groupByKey一样,reduce任务的数量是通过可选的第二个参数进行配置的。
sortByKey([ascending], [numTasks]) 当调用一个(K, V)对K实现排序的数据集时,返回一个由按升序或降序排列的(K, V)对的数据集,如布尔提升参数中所指定的那样。
join(otherDataset, [numTasks]) 当调用类型的数据集(K,V)和(K,W)时,返回一个数据集(K,(V,W))对每一个键的所有对元素。外部连接通过左外连接、右外连接与全外连接。
cogroup(otherDataset, [numTasks]) 当调用类型的数据集(K,V)和(K,W)时,返回一个 (K, (Iterable, Iterable)) 元素的数据集。这个操作也称为group分组。
cartesian(otherDataset) 当调用类型T和U的数据集时,返回一个(T,U)对(所有对元素)的数据集。
pipe(command, [envVars]) 通过shell命令对RDD的每个分区进行管道,例如Perl或bash脚本。RDD元素被写入到进程的stdin中,输出到其stdout的输出被作为字符串的RDD返回。
coalesce(numPartitions) 将RDD中的分区数量减少到num分区。在过滤大数据集之后,可以更有效地运行操作。
repartition(numPartitions) 对RDD中的数据进行随机重组,以创建多个或更少的分区,并在它们之间进行平衡。这通常会使网络上的所有数据都被打乱。
repartitionAndSortWithinPartitions(partitioner) 根据给定的分区重新分区RDD,在每个结果分区中,根据它们的键对记录进行排序。这比调用重新分区更有效,然后在每个分区中进行排序,因为它可以将排序推入到洗牌机器中。

Actions

Action 描述
reduce(func) 使用函数func聚合数据集的元素(它需要两个参数并返回一个参数)。这个函数应该是可交换的和结合的,这样它就可以在并行计算中得到正确的计算。
collect() 将数据集的所有元素作为驱动程序的数组返回。这通常是在过滤器或其他操作之后才会有用的,这些操作返回一个足够小的数据子集。
count() 返回数据集中的元素数量。
first() 返回数据集的第一个元素(类似于take(1))。
take(n) 返回一个带有数据集的第n个元素的数组。
takeSample(withReplacement, num, [seed]) 返回一个包含数据集的num元素随机样本的数组,不管有没有替换,都可以选择预先指定一个随机数生成器种子。
takeOrdered(n, [ordering]) 返回RDD的前n个元素,使用它们的自然顺序或自定义比较器。
saveAsTextFile(path) 在本地文件系统、HDFS或任何其他hadoop支持的文件系统中,将数据集的元素作为文本文件(或一组文本文件)写入一个给定目录中。Spark将调用每个元素的toString,将其转换为文件中的一行文本。
saveAsSequenceFile(path) (Java and Scala) 在本地文件系统、HDFS或任何其他Hadoop支持的文件系统中,将数据集的元素作为Hadoop序列文件写入给定路径。这可用于实现Hadoop可写接口的键-值对的RDDs。在Scala中,它还可以在可隐式可转换的类型中使用(Spark包含诸如Int、Double、String等基本类型的转换)。
saveAsObjectFile(path) (Java and Scala) 使用Java序列化以简单的格式编写数据集的元素,然后可以使用sparkcontext.objectfile()装载数据。
countByKey() 只有在类型的rdd(K,V)上才可用。返回一个hashmap(K,Int)对每个键的计数。
foreach(func) 在数据集的每个元素上运行一个函数func。这通常是为了一些副作用,比如更新一个累加器或者与外部存储系统进行交互。注意:除了foreach()之外的累计变量之外,修改变量可能导致未定义的行为。请参阅理解闭包,了解更多细节。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huanglongdejia/article/details/81153180

智能推荐

Unity_实验二_游戏场景搭建_unity3d 雾化__0.78的博客-程序员秘密

实验二 游戏场景搭建实验目的:掌握游戏场景搭建。实验要求:能够使用Unity的地形引擎创建地形,熟悉场景中的光照与阴影,掌握天空盒和雾化效果等。实验内容:地形的绘制:使用高度图绘制;使用笔刷绘制高度;在场景中需要有树木,草等。调节场景的光照和阴影:熟悉光源的类型,场景中需要有至少两种以上的光源,包括全局光源和局部光源。给场景添加天空盒。添加场景的雾化效果。提交:下课之前提交,打包工程项目进行提交(.rar或者.zip),文件命名为:班级+学号后四位+姓名,如1711+0210+张三

Ilog、Drools、Jess规则引擎的Rule Language 比对_江南白衣的博客-程序员秘密

Ilog JRules今天对比了一下这三个颇有代表性的规则引擎的规则语言。其中Ilog是商业产品,没有机会实战。作者:江南白衣 1.一样的If--Then 句式与Rete引擎    三者都会把原来混乱不堪的if---else---elseif----else谜团,    拆成N条带优先级的"If  条件语句  then  执行语句" 的句式。        三者都主要使用foreward-chai...

[转] FileZilla Server超详细配置_weixin_30544657的博客-程序员秘密

FileZilla Server下载安装完成后,必须启动软件进行设置,由于此软件是英文,本来就是一款陌生的软件,再加上英文(注:本站提供中文版本,请点击下载),配置难度可想而知,站长从网上找到一篇非常详细的教程进行整理了一番,确保读到这篇教程的同学都能够进行免费ftp服务器FileZilla Server配置(中文版和英文版菜单位置一样)。FileZilla Server启动界面...

2021 华数杯全国大学生数学建模竞赛B题——进出口公司的货物装运策略_Code_King1的博客-程序员秘密

B题 进出口公司的货物装运策略进出口公司经常需要将销售的货物通过货运飞机进行运输。货运飞机有大、中、小三种类型,每一种飞机均有前、中、后三个货舱,每个货舱有最大容积、最大载重量的限制。每种货物可以在一个或多个货舱中任意分布,多种货物可以混装。为了保证飞机飞行平稳,三个货舱中实际载重必须与其最大载重成比例。详细数据见附件1。销售的货物有HW1-HW10等10种,每件货物均为长方体,货物尺寸、体积(立方米)、重量(吨)、运输单价均已知。进出口公司为了精确营销,收集了前50个周期的每种货物的销售量以

[CTFSHOW]反序列化(仅更新必要的题目)_ctf反序列化题目_Y4tacker的博客-程序员秘密

文章目录前言web254-web256web257前言新的篇章师傅们加油鸭web254-web256有空补上web257代码审计,魔法函数__construct当对象被创建的时候自动调用,对对象进行初始化。当所有的操作执行完毕之后,需要释放序列化的对象,触发__destruct()魔术方法<?phperror_reporting(0);highlight_file(__FILE__);class ctfShowUser{ private $username='xxxxx

ABAP如何检查字符串是否为日期或时间格式_abap 如何判断是否是日期格式_ChampaignWolf的博客-程序员秘密

1、下面函数是检查日期的合法性的函数CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'EXPORTINGdate = v_dateEXCEPTIONSplausibility_check_failed = 1OTHERS = 2.IF sy-subrc NE 0. "如果返回非0,则日期不合法..ENDIF. 2、下面函数是检查时间合法性的函数CALL FUNCTION 'TIME_CHECK_PLAUSIBILITY'EXPORTINGtime =

随便推点

在 WebSphere MQ V6.0 上运行独立 Java 应用程序_iteye_910的博客-程序员秘密

本文提供的示例代码和配置充分考虑了这些更改。本文还包括有关 JMS 1.1 中的统一域类、异常处理、传输绑定和其他最佳实践等信息。即使您熟悉原来的文章,也可在这篇文章中找到其他非常有用的信息。为什么使用独立 JMS 应用程序?人们可能会感到奇怪,为什么要编写在 J2EE 环境外部执行的 JMS 消息传递程序?的确,J2EE 接收了许多主要消息,但是在 J2EE 之前也有一些消息,我们仍...

自己对thymeleaf和freemaker的使用选择_足球带我奔跑的博客-程序员秘密

项目使用easyui等ui框架时使用freemaker理由:       1.freemaker 类似与jsp学习成本低符合以前使用jsp的习惯        2.freemaker性能比thymeleaf好       3.使用了easyui等ui框架很少对html 标签和标签属性进行手动处理,都是通过ajax返回json数据,由ui框架的组件直接渲染项目中使用纯html时使...

CUDA动态并行_武泗海的博客-程序员秘密

Nvidia的GPU,设备计算能力>3.5的设备支持动态并行。可实现GPU线程启动核函数,而不用CPU端调用核函数。这在递归调用很有用!在项目要强制生成可重定位的设备代码,win操作:1.指定代码生成:设备项目-属性-CUDA C/C++ -Device- Code Generation 修改为 compute_35,sm_35。 具体数值可根据自身设备修改,但至少是SM_35。2

Plugin with id ‘maven’ not found_caused by: org.gradle.api.plugins.unknownpluginexc_limingbocsdn的博客-程序员秘密

问题描述:最近引入maven插件出问题了,总是报错找不到maven插件。Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id ‘maven’ not found.原因分析:这是关于该问题的讨论文章。就是说Gradle 7.版本将maven插件移除了,见官方说明需要使用maven publish插件替代。解决方案:使用maven publish插件即可,用法可以看maven-p.

springmvc 拦截器 防止重复提交表单_mvc中怎么设置数据不重复_追不上老鼠的猫的博客-程序员秘密

第一种方法:判断session中保存的token比较麻烦,每次在提交表单时都必须传入上次的token。而且当一个页面使用ajax时,多个表单提交就会有问题。注解Token代码:[java] view plain copypackage com.thinkgem.jeesite.common.repeat_form_vali

谈谈8583报文的使用及测试_postman 支持 iso 8583_Night_SaaS的博客-程序员秘密

ISO8583报文在金融行业可谓是声名显赫,8583报文是一个国际标准的包格式,其重要性阿堂就不用多说了,网上有很多的介绍,不过对于一个从未接触过8383报文的新手来说,还是很有难度的。它主要是用来解决金融系统之间的报文交换的。本文适合有一定8583报文基础的网友阅读!阿堂目前对于8583报文也是略有认识,之所以写这篇文章,一来是为了作为学习笔记,二来是为了能给其它对8583报文的使用和测试想加深

推荐文章

热门文章

相关标签