RDD操作(二)(Python)
2018-09-08 本文已影响0人
漂泊的胡萝卜
键值对 RDD 是 Spark 中许多操作所需要的常见数据类型。键值对 RDD 通常用来进行聚合计算。
我们一般要先通过一些初始 ETL(抽取、转化、装载)操作来将数据转化为键值对形式。
对于键值对RDD的操作一般为聚合统计操作。
转换为键值对RDD
在 Python 中使用第一个单词作为键创建出一个 pair RDD:
pairs = lines.map(lambda x: (x.split(" ")[0], x))
键值对RDD的操作
1. 键值对RDD的转化操作
针对1个pair RDD的转化操作
操作算子 | 含义 |
---|---|
reduceByKey(func) | 合并具有相同键的值 |
groupByKey() | 对具有相同键的值进行分组 |
combineByKey( createCombiner, mergeValue, mergeCombiners, partitioner) | 使用不同的返回类型合并具有 相同键的值 |
mapValues(func) | 对 pair RDD 中的每个值应用 一个函数而不改变键 |
flatMapValues(func) | 对 pair RDD 中的每个值应用 一个返回迭代器的函数,然后 对返回的每个元素都生成一个 对应原键的键值对记录。通常 用于符号化 |
keys() | 返回一个仅包含键的 RDD |
values() | 返回一个仅包含值的 RDD |
sortByKey() | 返回一个根据键排序的 RDD |
针对两个pair RDD的转化操作
操作算子 | 含义 |
---|---|
subtractByKey | 删掉 RDD 中键与 other RDD 中的键相同的元素 |
join | 对两个 RDD 进行内连接 |
rightOuterJoin | 对两个 RDD 进行连接操作,确保第一 个 RDD 的键必须存在(右外连接) |
leftOuterJoin | 对两个 RDD 进行连接操作,确保第二 个 RDD 的键必须存在(左外连接) |
cogroup | 将两个 RDD 中拥有相同键的数据分组 到一起 |
2. 键值对RDD的行动操作
操作算子 | 含义 |
---|---|
countByKey() | 对每个键对应的元素分别计数 |
collectAsMap() | 将结果以映射表的形式返回,以便查询 |
lookup(key) | 返回给定键对应的所有值 |