PySpark实战:groupByKey操作

来自CloudWiki
跳转至: 导航搜索

介绍

groupByKey操作是一个变换算子,

它将RDD中每个键的值分组为单个序列,

用numPartitions分区对生成的RDD进行哈希分区,并返回一个新的RDD对象。

代码


import findspark
findspark.init()
##############################################
from pyspark.sql import SparkSession
spark = SparkSession.builder \
        .master("local[1]") \
        .appName("RDD Demo") \
        .getOrCreate();
sc = spark.sparkContext
#############################################
rdd = sc.parallelize([("a", 1), ("b", 1), ("a", 1)])
rdd2 = rdd.groupByKey() #按照key进行分组

def f(x):
        print(x)
        return len(x)

rdd2 = rdd2.mapValues(f)#计算每组有多少个
# [('a', 2), ('b', 1)]
print(rdd2.collect())

def f2(x):
        #print(x)
        return list(x)

#rdd2 = rdd.groupByKey().mapValues(list)
rdd2 = rdd.groupByKey().mapValues(f2)#以列表的形式,查看每组都有哪些元素
# [('a', [1, 1]), ('b', [1])]
print(rdd2.collect())
##############################################
sc.stop()


  • 如果要分组以便对每个键执行聚合,例如求和或平均值,则建议使用reduceByKey 或AggregateByKey,因为他们可以提供更好的性能。

输出

[('a', 2), ('b', 1)]

[('a', [1, 1]), ('b', [1])]