1、pair RDD的简介

Spark为包含键值对类型的RDD提供了一些专有的操作,这些RDD就被称为pair RDD

那么如何创建pair RDD呢? 在不同的语言中有着不同的创建方式

在python和Scala语言中创建的方式都是差不多的。

在java语言中:

java用户还需要调用专门的Spark函数mapToPair()来创建pair RDD。例如:

 //映射,word -> (word,1)
JavaPairRDD<String,Integer> rdd3 = rdd2.mapToPair(new PairFunction<String, String, Integer>() {
public Tuple2<String, Integer> call(String s) throws Exception {
return new Tuple2<String, Integer>(s,1);
}
});

2、pair RDD常见的转化操作

(1)以键值对{(1,2),(3,4),(3,6)}为例子

rdd.reduceByKey((x,y)=>x+y) ===> {(1,2),(3,10)}

rdd.groupByKey() ===> {(1,[2]),(3,[4,6])}

rdd.mapValues(x=>x+1) ===> {(1,3),(3,5),(3,7)}

rdd.flatMapValues(x=>(x to 5)) ===> {(1,2),(1,3),(1,4),(1,5),(3,4),(3,5)}

(2)针对两个pair RDD的转化,以键值对rdd={(1,2),(3,4),(3,6)}和orther={(3,9)}

rdd.substractByKey(orther) ==> {(1,2)} #删除相同的

rdd.join(orther) ==> {(3,(4,9)),(3,(6,9))}

rdd.rightOuterJoin(orther) ==> {(3,(Some(4),9)),(3,(Some(6),9))}

rdd.leftOuterJoin(orther) ==> {(1,(2,None)),(3,(4,Some(9))),(3,(6,Some(9)))}

rdd.cogroupn(orther) ==> {(1,([2],[])),(3,([4,6],[9]))} #将两个RDD中相同的键的数据分组

(3)聚合操作

reduceByKey()前面已经讲过,此处不再赘述。

并行度调优: 每个RDD都有自己固定的数目的分区,分区数决定了RDD上的执行操作的并行度,在执行聚合或者分组操作时,可以要求Spark使用给定的分区数。Spark始终尝试根据集群的大小推断一些有意义默认值。但是,有时候可以根据并行度的调优来获取更好的性能要求。

Spark还提供了repartition()函数,他会把数据通过网络进行混洗,并创建出新的分区集合,但是对数据进行重新分区是代价比较大的操作。为此,Spark提供了一款优化版的repartition(),叫coalesce()。(我们可以通过rdd.getNumPartitions查看RDD的分区)

(4)分组操作

groupByKey()前面已经讲过,此处不再赘述。需要注意的是:返回的是[K,Iterable[V]]类型

(5)连接操作

join的操作,前面已经简单介绍

(6)数据排序

rdd.sortByKey() #注意要提供自定义的比较函数

3、pair RDD的行动操作

以键值对{(1,2),(3,4),(3,6)}为例子

rdd.countByKey() ===> {(1,1),(3,2)} #统计键出现的次数

rdd.collectAsMap() ===> Map{(1,2),(3,4),(3,6)} #返回的Map 便于查询

rdd.lookup(3) ===> [4,6] #返回给定键对应的所有值

4、数据分区

自定义分区并且持久化降低网络通信的开销

例如:Scala实现的例子

val sc=new SparkContext(…) val

userData=sc.sequenceFile[UserID,UserInfo](“hdfs://…”)

.partitionBy(new HashPartitioner(100)) //构造100个分区

.persist()

同样的我们还可以通过partitioner方法来获取RDD的分区方式

Spark基础:(三)Spark 键值对操作的更多相关文章

  1. spark入门(三)键值对操作

    1 简述 Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD. 2 创建PairRDD 2.1 在sprk中,很多存储键值对的数据在读取时直接返回由其键值对数据组成 ...

  2. Spark学习之键值对操作总结

    键值对 RDD 是 Spark 中许多操作所需要的常见数据类型.键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式.键值对 RDD ...

  3. Spark中的键值对操作-scala

    1.PairRDD介绍     Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,Pa ...

  4. Spark中的键值对操作

    1.PairRDD介绍     Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD.PairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口.例如,Pa ...

  5. Redis源码解析:09redis数据库实现(键值对操作、键超时功能、键空间通知)

    本章对Redis服务器的数据库实现进行介绍,说明Redis数据库相关操作的实现,包括数据库中键值对的添加.删除.查看.更新等操作的实现:客户端切换数据库的实现:键超时相关功能的实现.键空间事件通知等. ...

  6. Spark学习笔记3:键值对操作

    键值对RDD通常用来进行聚合计算,Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为pair RDD.pair RDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口. S ...

  7. Spark学习笔记——键值对操作

    键值对 RDD是 Spark 中许多操作所需要的常见数据类型 键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式. Spark 为包 ...

  8. 键值对操作 上(Spark自学五)

    键值对RDD是Spark中许多操作所需要的常见数据类型. “分区”是用来让我们控制键值对RDD在各节点上分布情况的高级特性.使用可控的分区方式把常在一起被访问的数据放在同一个节点上,可以大大减少应用的 ...

  9. redis基础之基本键值操作和使用(三)

    前言 redis安装完毕后开始使用redis,先熟悉命令行操作. redis数据的类型 键:redis的所有的键都是string类型: 值:五种类型 string:字符串类型:一个string最大可以 ...

随机推荐

  1. hdu 2147 kiki's game(DP(SG)打表找规律)

    题意: n*m的棋盘,一枚硬币右上角,每人每次可将硬币移向三个方向之一(一格单位):左边,下边,左下边. 无法移动硬币的人负. 给出n和m,问,先手胜还是后手胜. 数据范围: n, m (0<n ...

  2. Arthas在线java进程诊断工具 在线调试神器

    tag: java 诊断 堆栈 在线调试 耗时 死锁 arthas 阿里巴巴 Arthas (阿尔萨斯) Arthas 是 Alibaba 开源的Java诊断工具,深受开发者喜爱. 官网文档:http ...

  3. MySQL:由于找不到VCRUNTIME140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题

    我只是搬用工,记录一下 方法一: 安装这个微软常用运行库合集(https://www.repaik.com/), 链接:https://pan.baidu.com/s/1r4JJaUKjw-y1g3l ...

  4. USB3.0 转USB3.0

    前段时间因为项目需求需要将相机的USB3.0口转接出来,心想那还不想简单,结果第一次就碰壁了:先说一下usb3.0的引脚定义如图: 九个脚,2个地:注意USB3.0转3.0时数据线全交叉,DM-和DP ...

  5. 【Microsoft Azure 的1024种玩法】二.基于Azure云平台的安全攻防靶场系统构建

    简介 本篇文章将基于在Microsoft Azure云平台上使用Pikachu去构建安全攻防靶场,Pikachu使用世界上最好的语言PHP进行开发,数据库使用的是mysql,因此运行Pikachu需要 ...

  6. Linux 软连接与硬连接 区别

    先说结论 软连接相当于快捷方式,访问软连接会被替换为其指向的绝对路径,如果其指向的文件被删除,则无法访问. 硬连接相当于指针,与它指向的文件都指向相同的inode,当其指向的文件被删除,inode由于 ...

  7. [cf1491H]Yuezheng Ling and Dynamic Tree

    将其按照区间分块(即$[(i-1)K+1,iK]$作为一个块),并定义$f_{x}$表示$x$的祖先中编号最小且与$x$在同一个块内的节点,$f_{x}$可以通过$f_{a_{x}}$转移,即$f_{ ...

  8. [nowcoder5671D]Data structure

    问题相当于统计$且\sum_{l\le x<y\le r且lca(x,y)=x}1=c(sz[x],2)-\sum_{son}c(sz[son],2)$,考虑用莫队来维护区间,那么相当于要支持: ...

  9. Python实战:截图识别文字,过万使用量版本!(附源码!!)

    前人栽树后人乘凉,以不造轮子为由 使用百度的图片识字功能,实现了一个上万次使用量的脚本. 系统:win10 Python版本:python3.8.6 pycharm版本:pycharm 2021.1. ...

  10. jmeter链接数据库,信息全部填写正确,运行之后没有结果

    之前遇到一个很苦恼的问题,jmeter链接数据库,数据库填写的资料全部都没有问题,在其他电脑jmeter上都可以正常链接,但是在我的电脑上运行却总是不出结果, 用mysql链接数据库也一切正常,一直找 ...