问题集锦

Spark RDD 求分区最大值

基础知识我就不在这里讲啦,这里介绍两种方法。我是在本地写的代码也就是IDEA。

我们知道数据通过spark上下文对象创建后会分配到不同的分区里,那么每个分区的最大值是多少呢?

方法1:mapPartitions算子:

//找到每个分区最大值
val maxRDD: RDD[Int] = sc.makeRDD(1 to 10, 3)
val maxPartionEDD: RDD[Int] = maxRDD.mapPartitions(f => List(f.max).toIterator)
maxPartionEDD.collect().foreach(println)

分开写代码是为了看出每次执行一个计算方法都会生成一个新的RDD。可见RDD是不可变的。

合成一句就是:

sc.makeRDD(1 to 10, 3).mapPartitions(f => List(f.max).toIterator).collect().foreach(println)

方法2:glom()算子

//找到每个分区最大值
val maxRDD: RDD[Int] = sc.makeRDD(1 to 10, 3)
val glomRDD: RDD[Array[Int]] = maxRDD.glom()
glomRDD.collect().foreach(f=>{
  println(f.max)
})

合成一句就是:

sc.makeRDD(1 to 10, 3).glom().collect().foreach(f=>{println(f.max)})

两个代码结果都如下:

Spark RDD 求分区最大值已关闭评论