Spark系列五:键值对RDD

Spark系列四: 基本RDD----行动操作

键值对RDD通常用来进行聚合计算。

一般通过一些初试ETL(抽取、转化、装载)操作来将数据转化为键值对形式。

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

我们通常从一个RDD中提取某些字段(如代表事件时间、用户ID 或者其他标识符的字段),并使用这些字段作为pairRDD操作中的键。

pairRDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口

 

1. 创建pairRDD

存储键值对的数据格式中读取时直接返回由其键值对数据组成的pairRDD,

当需要把一个普通的RDD转为pairRDD时,可以调用map()函数来实现,传递的函数需要返回键值对

 

2. pairRDD的转化操作

可以使用所有标准RDD上的可用的转化操作

 

 

pairRDD还是RDD,如可以拿pairRDD筛选掉长度超过20个字符的行

 

聚合操作:

reduceByKey():和reduce()相当类似,它们都接收一个函数,并使用该函数对值进行合并。reduceByKey()可以分别归约每个键对应的数据,每个归约操作会将键相同对值合并起来。它返回一个由各键和对应键归约出来的结果值组成的新的RDD

 

combineByKey():最为常用的基于键进行聚合的函数,和aggregate()一样,combinByKey()可以让用户返回与输入数据的类型不同的返回值。  combineByKey() 会遍历分区中的所有元素,因此每个元素的键要么还没遇到过,要么和之前的某个元素的键相同。

 

foldByKey():与fold()相当类似,使用一个与RDD合并函数中的数据类型相同的零值作为初始值。与fold()一样,foldByKey()操作所使用的合并函数对零值与另一个元素进行合并,结果仍为该元素。

 

 

并行度调优

repartition():改变RDD的分区,把数据通过网络进行混洗,创建出新的分区集合。(这是对数据重新分区是代价相对比较大对操作)

coalesce():优化版repartition()

 

Java或scala中可以使用rdd.partition.size(),Python中用rdd.getNumPartitions查看RDD的分区数,

并确保coalesce()时将RDD合并到比现在的分区数更少的分区中。

 

数据分组

groupByKey():使用RDD中的键来对数据进行分组,

对一个由类型K的键和类型V的值组成的RDD,得到的结果RDD类型会是[ K,Iterable[V] ]

groupBy():用于未成对的数据上,也可以根据除键相同以外的条件进行分组。它可以接收一个函数,对源RDD中的每个元素使用该函数,将返回结果作为键再进行分组。

 

连接

join():可以把两个RDD中键相同的元素组合到一起,合并为一个RDD

 

数据排序

sortByKey():接收一个叫ascending的参数,表示我们是否要让结果按照升序排序(默认为true)

 

pairRDD的行动操作

 

 

数据分区:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值