Spark算子:统计RDD分区中的元素及数量

本文通过实例演示了如何使用 Spark 创建 RDD,并展示了如何统计每个分区的元素数量及具体元素。通过对 RDD 的操作,读者可以更好地理解 Spark 中的数据分布和处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:

http://www.cnblogs.com/seaspring/articles/5641895.html


//创建一个RDD,默认分区15个,因为我的spark-shell指定了一共使用15个CPU资源
//–total-executor-cores 15

scala> var rdd1 = sc.makeRDD(1 to 50)
rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[17] at makeRDD at :21

scala> rdd1.partitions.size
res15: Int = 15

//统计rdd1每个分区中元素数量

rdd1.mapPartitionsWithIndex{
          (partIdx,iter) => {
              var part_map = scala.collection.mutable.Map[String,Int]()
              while(iter.hasNext){
                  var part_name = "part_" + partIdx;
                  if(part_map.contains(part_name)) {
                     var ele_cnt = part_map(part_name)
                     part_map(part_name) = ele_cnt + 1
                  } else {
                     part_map(part_name) = 1
                  }
                  iter.next()
              }
              part_map.iterator
         }
}.collect

res16: Array[(String, Int)] = Array((part_0,3), (part_1,3), (part_2,4), (part_3,3), (part_4,3), (part_5,4), (part_6,3),
(part_7,3), (part_8,4), (part_9,3), (part_10,3), (part_11,4), (part_12,3), (part_13,3), (part_14,4))
//从part_0到part_14,每个分区中的元素数量

//统计rdd1每个分区中有哪些元素

rdd1.mapPartitionsWithIndex{
       (partIdx,iter) => {
           var part_map = scala.collection.mutable.Map[String,List[Int]]()
           while(iter.hasNext){
               var part_name = "part_" + partIdx;
               var elem = iter.next()
               if(part_map.contains(part_name)) {
                   var elems = part_map(part_name)
                   elems ::= elem
                   part_map(part_name) = elems
               } else {
                   part_map(part_name) = List[Int]{elem}
               }
           }
          part_map.iterator
      }
}.collect

res17: Array[(String, List[Int])] = Array((part_0,List(3, 2, 1)), (part_1,List(6, 5, 4)), (part_2,List(10, 9, 8, 7)), (part_3,List(13, 12, 11)),
(part_4,List(16, 15, 14)), (part_5,List(20, 19, 18, 17)), (part_6,List(23, 22, 21)), (part_7,List(26, 25, 24)), (part_8,List(30, 29, 28, 27)),
(part_9,List(33, 32, 31)), (part_10,List(36, 35, 34)), (part_11,List(40, 39, 38, 37)), (part_12,List(43, 42, 41)), (part_13,List(46, 45, 44)),
(part_14,List(50, 49, 48, 47)))
//从part_0到part14,每个分区中包含的元素



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值