当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark RDD reduceByKey方法用法及代码示例


PySpark RDD的reduceByKey(~)方法通过key聚合RDD数据,并执行归约操作。归约运算就是将多个值归约为单个值的运算(例如求和、乘法)。

参数

1. func | function

要应用的缩减函数。

2. numPartitions | int | optional

默认情况下,分区数量将等于父 RDD 的分区数量。如果父 RDD 没有设置分区计数,则将使用 PySpark 配置中的并行级别。

3. partitionFunc | function | optional

要使用的分区器 - 输入是键,返回值必须是哈希值。默认情况下,将使用哈希分区器。

返回值

PySpark RDD (pyspark.rdd.PipelinedRDD)。

例子

考虑以下 Pair RDD:

rdd = sc.parallelize([("A",1),("B",1),("C",1),("A",1)], numSlices=3)
rdd.collect()



[('A', 1), ('B', 1), ('C', 1), ('A', 1)]

这里, parallelize(~) 方法创建了一个具有3个分区的RDD。

按对 RDD 中的键进行分组并执行归约操作

按键分组并对每个分组键的值进行求和:

rdd.reduceByKey(lambda a, b: a+b).collect()



[('B', 1), ('C', 1), ('A', 2)]

设置对RDD中按键减少后的分区数

默认情况下,生成的 RDD 的分区数将等于父 RDD 的分区数:

# Create a RDD using 3 partitions
rdd = sc.parallelize([("A",1),("B",1),("C",1),("A",1),("D",1)], numSlices=3)
new_rdd = rdd.reduceByKey(lambda a, b: a+b)
new_rdd.getNumPartitions()



3

这里, rddnew_rdd 的父 RDD 。

我们可以通过设置 numPartitions 参数来设置生成的 RDD 的分区数量:

rdd = sc.parallelize([("A",1),("B",1),("C",1),("A",1),("D",1)], numSlices=3)
new_rdd = rdd.reduceByKey(lambda a, b: a+b, numPartitions=2)
new_rdd.getNumPartitions()



2

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark RDD | reduceByKey method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。