青岛优化网站技术,上海建设摩托车官网,手机端steam,做鞋子皮革有什么网站Fold、FoldLeft 和 FoldRight
object Test03_Fold {def main(args: Array[String]): Unit {// 称作集合外的参数val list List(1,2,3,4)// fold的底层仍然是调用的 foldLeft// 第一个参数是一个值(称作集合内的参数#xff0c;必须和集合外的参数类型一致)// 第二个参数是一…Fold、FoldLeft 和 FoldRight
object Test03_Fold {def main(args: Array[String]): Unit {// 称作集合外的参数val list List(1,2,3,4)// fold的底层仍然是调用的 foldLeft// 第一个参数是一个值(称作集合内的参数必须和集合外的参数类型一致)// 第二个参数是一个函数操作opprintln(list.fold(5)(__)) //15/*** 5 1 6* 6 2 8* 8 3 11* 11 4 15*/// 这里的集合内参数类型可以和集合外的参数类型不一致println(list.foldLeft(5)(_-_)) //执行过程和上面的 fold 一致// 这里的集合内参数类型可以和集合外的参数类型不一致println(list.foldRight(5)(_-_))/*** 翻转集合list (4,3,2,1)* 4 - 5 -1 集合第一个值 4 - 初始值 5 结果1* 3 - (-1) 4 集合第二个值 3 - 结果1 结果2* 2 - 4 -2* 1- (-2) 3*/}
}MapValues 和 groupBy
object Test05_MapValues {def main(args: Array[String]): Unit {val lines List(hello spark,hello flink,hello flink)val list:Map[String,Int] lines.flatMap(_.split( )).map((_, 1)).groupBy(_._1).mapValues(_.size)for(key - list.keySet){println(k key v list.getOrElse(key, 0))}/*** k hello v 3k spark v 1k flink v 2*/}
}
Aggregate import scala.collection.mutableobject Test02_Aggregate {def main(args: Array[String]): Unit {val s List(1, 2, 3, 4)/*** 需要提供3个参数:* 1.初始值(类型是我们期待返回的类型)* 2.累加器函数把RDD中的元素合并起来放到累加器进行计算* 3.合并累加器函数: 由于每个节点在本地计算,所以需要合并不同节点累加器的结果* (0,0): 作为s的初始值 (类型是我们期待返回的类型)* (s,r): r是s的某个元素(1,2,3,4)中的一个(并行计算,每次取出的值可能是乱序的,但是结果是相同的)* (s._1 r,s._2 1) (01,01) (1,1)* (s._1 r,s._2 1) (12,11) (3,2)* (s._1 r,s._2 1) (33,21) (6,3)* (s._1 r,s._2 1) (64,31) (10,4)*/val r s.par.aggregate((0, 0))((s, r) (s._1 r, s._2 1),(s,r) (s._1 r._1, s._2 r._2))println(r) // (10,4)val lines List(hello spark,hello flink,hello flink)var res: mutable.Map[String,Int] lines.flatMap(_.split( )).aggregate((mutable.Map.empty[String,Int]))((countMap:mutable.Map[String,Int],word){if(!countMap.contains(word)){countMap.put(word,1)}else{countMap.put(word,countMap(word)1)}countMap},(map1:mutable.Map[String,Int], map2:mutable.Map[String,Int]){for((word,count)-map1){if(!map2.contains(word)){map2.put(word,1)}else{map2.put(word,map2(word)count)}}map2})val keys res.keySetfor(key - keys){println(k key v res.getOrElse(key, 0))}/*** k spark v 1k flink v 2k hello v 3*/}
}
getOrElse
object Test04_GetOrElse {def main(args: Array[String]): Unit {/*** getOrElse()主要就是防范措施如果有值那就可以得到这个值如果没有就会得到一个默认值.*/val map: Map[String,Int] Map(a-1,b-2)println(map.getOrElse(a,0)) // 1println(map.getOrElse(b,0)) // 2println(map.getOrElse(c,3)) // 3}
}