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])]