SPARK-学习1

键值对操作

键值对RDD通常用来进行聚合计算,我们一般要通过一些初始ETL(抽取、转换、装载)操作来将数据转换为键值对形式。
比如统计每个产品的评论,将数据中键相同的分为一组,将两个不同的RDD进行分组合并等。

用户控制键值对RDD在各个节点上分布情况的高级特性:分区。有时使用可控的分区方式将常被访问的数据放到同一个节点上
可以大大较少应用的通信开销。这回带来明显的性能提升。

Spark为包含键值对类型RDD提供了一些专有操作,这些RDD被称为pairRDD。
生成:将RDD中提取某个字段作为pairRDD的键。
方法:reduceByKey() 可以分别归约每个键对应的数据
join():把两个RDD中键相同的元素组合在一起,合并为一个RDD

创建pairRDD的方法:
1.很多读取键值对的数据格式会在读取时直接返回由其键值对数据组成的pairRDD
2.可以调用map方法来转为pairRDD。
3.sc.parallelizePairs();

相关API:

PairRDD的转换操作
reduceByKey(func) 合并具有相同的值
groupByKey() 对具有相同的值进行分组
combineByKey()使用不同的返回类型合并具有相同键的值。
mapValues(func) 对pairRDD中的每个值应用一个函数而不改变键
flatMapValues(func) 对pairRDD每个值应用一个返回迭代器的函数,然后对返回的每个元素都生成一个对应原键的键值对记录。
keys() 返回一个仅包含键的RDD
values()返回一个仅包含值得RDD
sortByKey() 返回一个根据键排序的pairRDD。

两个pairRDD的转换操作
subtractByKey 删掉RDD中键与other RDD中相同的元素
join 对两个RDD进行内连接
rightOuterJoin 对两个RDD进行连接操作,确保第一个RDD的键必须存在(右外连接)
leftOuterJoin 同上做链接
cogroup 将两个相同键的数据分组

聚合操作:
reduceByKey:会为数据中每个键进行并行的归约操作。每个归约操作会将键相同的值合并起来。
foldByKey: 他们都是用一个与RDD和合并函数中的数据类型相同的零值作为初始值。

combineByKey 基于键进行聚合的函数。可以让用户返回与输入数据类型不同的返回值
原理:便利分区中每一个键,如果这个键为新元素,则会使用createCombiner的函数创建那个键对应的累加器的初始值
如果已经存在则会使用mergeValue将该键的累加器对应的当前值与这个新的值进行合并

由于分区是独立处理的,因此对于同一个键可以有多个累加器。

groupByKey() 通过RDD中的建来对数据进行分组,对于一个类型K的键和类型V的值组成的RDD,所得到的结果RDD类型
会是[K,Iterable[V]]

cogroup :对多个共享同一个键的RDD进行分组,对两个键类型均为K而值为V和W的RDD进行cogroup()时,
结果为[K,Iterable[V],Iterable[W]].

连接
join [K,Iterable[V]]
left/rightOuterJoin 会生成Option的对象
(a,(12345,Optional[12345]))
(c,(12345,Optional.empty))

排序
sortByKey(true) 升序
sortbyKey(false) 降序

行动操作
countByKey()对每个键的元素分别计数
collectAsMap() 将结果以映射表的形式返回,以便查询
lookup(key) 跟定键找到对应的是所有值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值