spark--transform算子--mapPartitions

import org.apache.spark.{SparkConf, SparkContext}

import scala.collection.immutable.HashMap
import scala.collection.mutable.ArrayBuffer


/**
  * Created by liupeng on 2017/6/15.
  */
object T_mapPartitions {

  System.setProperty("hadoop.home.dir","F:\\hadoop-2.6.5")

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("mapPartitions_test").setMaster("local")
    val sc = new SparkContext(conf)

    //准备一下数据
    val names : List[String] = List("liupeng", "xuliuxi", "xiaoma")
    val nameRDD = sc.parallelize(names)


    //map算子,一次就处理一个partition的一条数据
    //mapPartitions算子,按照分区遍历,一次处理一个partition中所有的数据

    //推荐的使用场景!!!
    //如果你的RDD的数据不是特别多,那么采用mapPartitions算子代替map算子,可以加快处理速度
    //比如说100亿条数据,你一个partition里面就有10亿条数据,不建议使用mapPartitions
    //内存溢出

    def showCapital(x : Option[Int]) = x match {
      case Some(s) => s
      case None => 0
    }

    def scoreFunc(iter : Iterator[String]) : Iterator[Int]= {
      val res = ArrayBuffer[Int]()

      var scoreMap  = new HashMap[String, Int]
      scoreMap += ("liupeng" -> 150)
      scoreMap += ("xuliuxi" -> 120)
      scoreMap += ("xiaoma" -> 100)

      while (iter.hasNext)
      {
        var name : String = iter.next()
        var score  = scoreMap.get(name).get
        res += score
        println(name)
      }
      return res.iterator
    }

    val result = nameRDD.mapPartitions(scoreFunc)
    result.foreach(println)
  }

}
运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值