第五章_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() }