刚接触spark的时候,总是想把rdd每个分区的数据打印出来,有时候是想看默认分区是啥样子的,有时候是想看rePartion到底起作用了没。
操作分区主要有mapPartitions和mapPartitionsWithIndex方法,mapPartitionsWithIndex提供了分区的索引(代码中partid)。
遍历分区输出分区内容的代码:
val rdd = sc.parallelize(1 to 8,3) rdd.mapPartitionsWithIndex{ (partid,iter)=>{ var part_map = scala.collection.mutable.Map[String,List[Int]]() var part_name = "part_" + partid part_map(part_name) = List[Int]() while(iter.hasNext){ part_map(part_name) :+= iter.next()//:+= 列表尾部追加元素 } part_map.iterator } }.collect
输出:
res0: Array[(String, List[Int])] = Array((part_0,List(1, 2)), (part_1,List(3, 4, 5)), (part_2,List(6, 7, 8)))