groupByKey、reduceByKey、aggregateByKey区别

文章介绍了Spark中的三个关键的分布式数据处理操作:reduceByKey用于对键值对数据进行聚合,通过指定函数合并相同键的值;groupByKey将相同键的值收集到一起,形成键值对的集合,但可能引发内存问题;aggregateByKey则允许使用中性元素和组合函数进行更灵活的聚合,同时避免内存分配问题。示例展示了这三个操作的使用方法和结果。
摘要由CSDN通过智能技术生成

官网介绍

  • reduceByKey(func, [numPartitions])当在 (K, V) 对的数据集上调用时,返回 (K, V) 对的数据集,其中每个键的值使用给定的 reduce 函数func聚合,该函数必须是 (V,V) => V. 与 中一样groupByKey,reduce 任务的数量可通过可选的第二个参数进行配置。
  • groupByKey ([ numPartitions ])
    当在 (K, V) 对的数据集上调用时,返回 (K, Iterable) 对的数据集。
    注意:如果您分组是为了对每个键执行聚合(例如求和或平均值),使用reduceByKey或aggregateByKey将产生更好的性能。
    注意:默认情况下,输出中的并行级别取决于父 RDD 的分区数。您可以传递一个可选numPartitions参数来设置不同数量的任务。
  • aggregateByKey ( zeroValue )( seqOp ,combOp , [ numPartitions ])
    当在 (K, V) 对的数据集上调用时,返回 (K, U) 对的数据集,其中每个键的值使用给定的组合函数和中性“零”值聚合。允许与输入值类型不同的聚合值类型,同时避免不必要的分配。与 in 一样groupByKey,reduce 任务的数量可通过可选的第二个参数进行配置。

用法

  • reduceByKey
1//1.创建一个RDD
val rdd1: RDD[String] = sc.makeRDD(List("one", "two", "two", "three", "three", "three"))
//2.相同key对应值的相加结果
val rdd2: RDD[(String, Int)] = rdd1.map((_,1)).groupByKey().map(v=>(v._1,v._2.size))
//3.打印
rdd2.collect().foreach(println)

//结果(three,3)  (two,2)  (one,1)
  • groupByKey

groupByKey 必须能够保存任何键在内存中。 如果一个键有太多的值,它可能会导致OutOfMemoryError。这里我们如果使用groupByKey 处理大量数据的话需放置出现内存OOM

//1.创建一个RDD
val rdd1: RDD[String] = sc.makeRDD(List("one", "two", "two", "three", "three", "three"))
//2.相同key对应值的相加结果
val rdd2: RDD[(String, Int)] = rdd1.map((_,1)).groupByKey().map(v=>(v._1,v._2.size))
//3.打印
rdd2.collect().foreach(println)

//结果(three,3)  (two,2)  (one,1)
  • aggregateByKey
​
​
//1.创建一个RDD
val rdd1: RDD[(String,Int)] = sc.makeRDD(List(("a",3),("a",2),("c",4),("b",3),("c",6),("c",8)),2)
//2.取出每个分区相同key对应值的最大值
val rdd2: RDD[(String, Int)] = rdd1.aggregateByKey(0)((v1,v2)=> if(v1 > v2) v1 else v2 ,_+_)
//3.打印
rdd2.collect().foreach(println)
    
//结果:(b,3)  (a,3)  (c,12)

​

​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值