计算机系统应用教程网站

网站首页 > 技术文章 正文

18.Spark RDD算子 sparkaction算子

btikc 2024-10-12 11:40:57 技术文章 9 ℃ 0 评论

Spark Core

transfomation 转换算子

action 缓存算子

在整个过程中RDD在不断变换

一旦中间环节出错,也可以从前面的RDD重新构建出RDD

RDD操作

什么是RDD

RDD(Resilient Distributed Datasets)[1] ,弹性分布式数据集, 是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,然而这些限制使得实现容错的开销很低。对开发者而言,RDD可以看作是Spark的一个对象,它本身运行于内存中,如读文件是一个RDD,对文件计算是一个RDD,结果集也是一个RDD ,不同的分片、 数据之间的依赖 、key-value类型的map数据都可以看做RDD。

Resilient distributed datasets 弹性分布式数据集。是spark的核心,是分布式只读且分区的集合对象。这些集合是弹性的,如果数据丢失一部分,则可以对它进行重建。

RDD是只读的

RDD是分区记录的集合

RDD是容错的--lineage

RDD是高效的

RDD不需要物化

RDD可以缓存 --可以指定缓存级别

RDD特性

RDD接口

RDD可以理解为就是一组partition

调优:

避免数据倾斜

数据本地化

RDD-partition

partiton个数默认数值是这个程序所分配到的资源的cpu核的个数。

RDD-preferredLocations

返回RDD的partition的数据块信息,如果一个数据库有多个备份,返回所有备份的location信息。

作用:spark在进行任务调度尽可能根据block的地址做本地计算,避免网络开销。

RDD依赖

窄依赖

每个父RDD的分区至多被一个子RDD的分区使用,即为OneToOneDependencies

宽依赖

多个子RDD的分区依赖个父RDD的分区。

RDD遇到宽依赖时会shuffle,以shuffle为边界划分stage

RDD操作算子

transformaton

惰性求值

RDD的转化操作都是惰性求值的,这意味着在被调行动操作之前不会开始计算。

惰性求值的好处

Spark使用惰性求值可以把一些操作合并到一起来减少计算数据的步骤。

Hadoop MR的系统中,开发者常常划分大量的时间考虑如何把操作组合到一起,以减少MR并行周期数。

RDD的转化操作是返回新的RDD操作。

我们不应该把RDD看作存放特定数据的数据集,而最好把每个RDD当做我们通过转化操作构建处理的,记录如何计算数据的指令列表

缓存操作

缓存算子:对计算过程中要多次使用的RDD进行缓存,可以减少磁盘读写,减少重新构建RDD,加快程序的运行

checkpoint操作

将RDD持久化到hdfs中,与persisit操作不同的是checkpoint操作会切断此RDD之前的依赖关系,而persist依然保留RDD的依赖关系。

action操作

Pair RDD转换

Pair RDD可以使用所有标准RDD的操作,还提供了特有的转换操作。

输入

共享变量

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表