第五章_Spark核心编程_Rdd_转换算子_Value型_map

1. 说明

    定义 : def map[U: ClassTag](f: T => U): RDD[U]

    功能 : 通过对 RDD的所有元素应用一个函数 返回一个新的RDD

 

2. 思考 : map算子 和 Rdd分区 间的关系?

  object MapTestByPartition extends App {
    /*
    * 思考 :
    *     map算子 和 Rdd分区 间的关系?
    *        1. rdd 创建后会对其 切片
    *        2. map 算子处理 rdd时,会 并发处理不同的切片
    *        3. 同一分区按顺序执行,不同分区 并发执行
    * note :
    *     map操作完后,不会对数据排序(shuffle)
    *
    * */
    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("initRddByList")

    val sc: SparkContext = new SparkContext(sparkconf)

    val rdd: RDD[Int] = sc.makeRDD(List(1, -2, 3, 14, 0, 6, 2, 9, 10), 2)

    rdd.saveAsTextFile("Spark_319/src/output/01")
    /*
    * part-00000
    *   1, -2, 3, 14
    * part-00000
    *   0, 6, 2, 9, 10
    * */

    // 将 rdd元素转换成 绝对值
    private val absRdd: RDD[Int] = rdd.map(
      e => {
        println(s"===>正在操作 : ${e}")
        e.abs
      }
    )

    absRdd.saveAsTextFile("Spark_319/src/output/02")
    /*
    * part-00000
    *   1, 2, 3, 14
    * part-00000
    *   0, 6, 2, 9, 10
    * */

    sc.stop()
  }

3. 需求 : 从服务器日志数据apache.log中获取用户请求URL资源路径

  object MapTestDemo extends App {
    val sparkconf: SparkConf = new SparkConf().setMaster("local").setAppName("initRddByLocalFile")

    val sc: SparkContext = new SparkContext(sparkconf)

    private val rdd: RDD[String] = sc.textFile("Spark_319/src/data/input/apache.log", 2)

    println(s"rdd切片数 : ${rdd.getNumPartitions}")

    val rdd2: RDD[String] = rdd.map(_.split(" ").reverse(0))

    //83.149.9.216 - - 17/05/2015:10:05:03 +0000 GET /presentations/logstash-monitorama-2013/images/kibana-search.png

    rdd2.saveAsTextFile("Spark_319/src/output/03")

    sc.stop()
  }

 

posted @ 2022-03-22 19:00  学而不思则罔!  阅读(55)  评论(0)    收藏  举报