Pyspark学习笔记(五)RDD操作(三)_键值对RDD转换操作
文章目录
- Pyspark学习笔记(五)RDD操作(三)_键值对RDD转换操作
- 一、PySpark RDD 行动操作简介
- 二.常见的转换操作表 & 使用例子
-
- 0.初始的示例rdd,
- 1.`keys()`
- 2.`values()`
- 3.`keyBy(func)`
- 4.`mapValues(func)`
- 5.`flatMapValues(func)`
- 6.`sortByKey(ascending=True, numPartitions=None, keyfunc=function RDD.lambda)`
- 7.`groupByKey(numPartitions=None, partitionFunc=hash_func)`
- 8.`reduceByKey(func, numPartitions=None, partitionFunc=hash_func)`
- 9.`foldByKey(zeroValue, func, numPartitions=None, partitionFunc=hash_func)`
- 10.`aggregateByKey(zeroValue, seqFunc, combFunc, numPartitions=None, partitionFunc=hash_func)`
- 系列文章目录:
# 前言 提示:本篇博客讲的是键值对RDD的转换操作,即 PariRDD Transformations
主要参考链接:
1.Apache spark python api
2.Spark Pair-RDD Actions with examples
一、PySpark RDD 行动操作简介
键值对RDD,也就是PariRDD, 它的记录由键和值组成。
键(Key):可以是整型(INT)或者字符串(STRING)对象,也可以是元组这种复杂的对象。
值(Value):可以是标量,也可以是列表(List),元组(Tuple),字典(Dictionary)或者集合(Set)这些数据结构
首先要明确的是键值对RDD也是RDD,所以之前讲过的RDD的转换和行动操作,肯定也适用于键值对RDD;
但是键值对RDD由于其组织形式的特殊性,也有其自己专属的一些转换操作。
下面将介绍一些常用的键值对转换操作(注意是转换操作,所以是会返回新的RDD)
二.常见的转换操作表 & 使用例子
0.初始的示例rdd,
我们这里以第七次全国人口普查人口性别构成中的部分数据作为示例
[ ('Beijing', [51.14, 48.86, 104.65]), ('Shanghai',[51.77, 48.23, 107.33]), ('Guangdong', [53.07, 46.93, 113.08]), ('Jiangsu', [50.78, 49.22, 103.15])]
该RDD就是键值对RDD,每个元素是一个键值对,键(key)为省份名,值(Value)为一个list
1.keys()
该函数返回键值对RDD中,所有键(key)组成的RDD
pyspark.RDD.keys
# the example of keys
print("rdd_test_keys\n", rdd_test.keys().collect())
# out
['Beijing', 'Shanghai', 'Guangdong', 'Jiangsu']
2.values()
该函数返回键值对RDD中,所有值(values)组成的RDD
pyspark.RDD.values
# the example of values
print("rdd_test_values\n", rdd_test.values().collect())
# out
[ [51.14, 48.86, 104.65], [51.77, 48.23, 107.33], [53.07, 46.93, 113.08], [50.78, 49.22, 103.15] ]
3.keyBy(func)
该操作返回一个新的键值对RDD,
该RDD的键(key)是使用函数提取出的结果作为新的键,
该RDD的值(value)是原始pair-RDD的值作为值。
pyspark.RDD.keyBy
# the example of keyBy
print("rdd_test_keyBy\n", rdd_test.keyBy(lambda x: x[1][2]).collect())
[ (104.65, ('Beijing', [51.14, 48.86,