Spark——map和mapPartitions的区别
程序员文章站
2024-01-30 15:05:23
...
张三
李四
张三丰
李世民
张三
对名字做wordcount
val spark: SparkSession = SparkSession.builder().master("local[2]").appName("mappartition").getOrCreate()
val sc: SparkContext = spark.sparkContext
import spark.implicits._
val rdd: RDD[String] = sc.textFile("src/data/1234")
//map写法 将值全部拿出来处理
rdd.map(x=>(x.charAt(0),1)).reduceByKey(_+_).foreach(println)
//mapPartitions写法 将每个分区内的值分别进行统计 内部先统计一次 然后最后在统计 减少了数据的shuffle的过程
rdd.mapPartitions(f=>{
val lst:ListBuffer[(Char,Int)] = ListBuffer[(Char,Int)]()
while(f.hasNext){
lst.append((f.next().charAt(0),1))
}
lst.groupBy(_._1).map(x=>(x._1,x._2.size)).toIterator
}).foreach(println)
//mapPartitions的另一种写法
rdd.mapPartitions(x=>x.map(x=>(x.charAt(0),1)).toArray.groupBy(_._1).map(x=>(x._1,x._2.size)).toIterator)
.reduceByKey(_+_).foreach(println)
上一篇: javascript知识点
下一篇: spark笔记(二)之RDD常用算子
推荐阅读
-
Spark——map和mapPartitions的区别
-
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)_PHP教程
-
pandas ix & iloc &loc 的联系和区别
-
Servlet HttpRequest 中【getAttribute】和【getParameter】的区别
-
pandas中loc、iloc、ix的区别和使用
-
php学习之道:php中is_file和file_exist的区别,and判断目录is_dir
-
并行计算(2):并行计算和分布式处理的区别
-
简单介绍一下ThinkPHP5.0和ThinkPHP3.2的具体区别
-
MySQL中字段类型char、varchar和text的区别
-
C++ new、operator new和placement new的区别