您的位置:首页 > 健康 > 美食 > 点击seo软件_动漫设计好找工作吗_免费推广网站大全下载_站长之家的作用

点击seo软件_动漫设计好找工作吗_免费推广网站大全下载_站长之家的作用

2025/4/12 22:51:20 来源:https://blog.csdn.net/2501_90677971/article/details/147064010  浏览:    关键词:点击seo软件_动漫设计好找工作吗_免费推广网站大全下载_站长之家的作用
点击seo软件_动漫设计好找工作吗_免费推广网站大全下载_站长之家的作用

大数据技术之Scala

一.集合常用函数

1.集合计算高级函数

说明

过滤

遍历一个集合并从中获取满足指定条件的元素组成一个新的集合

(2)转化/映射(map)

将集合中的每一个元素映射到某一个函数

 (3)扁平化

(4)扁平化+映射 注:flatMap 相当于进行 map 操作,在进行 flatten 操作集合中的每个元素的子元素映射到某个函数并返回新集合

(5)分组(group)

按照指定的规则对集合的元素进行分组

 (6)简化(归约)

 (7)折叠

2)实操

object TestList {

 

def main(args: Array[String]): Unit = {

 

val list: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)

val nestedList: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))

val wordList: List[String] = List("hello world", "hello zpark", "hello scala")

 

//(1)过滤

println(list.filter(x => x % 2 == 0))

 

//(2)转化/映射println(list.map(x => x + 1))

 

//(3)扁平化println(nestedList.flatten)

 

//(4)扁平化+映射 注:flatMap 相当于先进行 map 操作,在进行 flatten

操作

println(wordList.flatMap(x => x.split(" ")))

 

//(5)分组

println(list.groupBy(x => x % 2))

}

}

3)Reduce方法

Reduce 简化(归约) :通过指定的逻辑将集合中的数据进行聚合,从而减少数据,最终获取结果。

案例实操

object TestReduce {

 

def main(args: Array[String]): Unit = { val list = List(1,2,3,4)

// 将数据两两结合,实现运算规则

val i: Int = list.reduce( (x,y) => x-y ) println("i = " + i)

 

// 从源码的角度,reduce 底层调用的其实就是 reduceLeft

//val i1 = list.reduceLeft((x,y) => x-y)

 

// ((4-3)-2-1) = -2

val i2 = list.reduceRight((x,y) => x-y) println(i2)

}

}

4)Fold方法

Fold 折叠:化简的一种特殊情况。

案例实操:fold 基本使用

object TestFold {

 

def main(args: Array[String]): Unit = { val list = List(1,2,3,4)

// fold 方法使用了函数柯里化,存在两个参数列表

// 第一个参数列表为 : 零值(初始值)

// 第二个参数列表为: 简化规则

// fold 底层其实为 foldLeft

val i = list.foldLeft(1)((x,y)=>x-y) val i1 = list.foldRight(10)((x,y)=>x-y)

println(i) println(i1)

}

}

(2)案例实操:两个集合合并

def main(args: Array[String]): Unit = {

 

// 两个 Map 的数据合并

val map1 = mutable.Map("a"->1, "b"->2, "c"->3)

val map2 = mutable.Map("a"->4, "b"->5, "d"->6)

 

val map3: mutable.Map[String, Int] = map2.foldLeft(map1)

{

(map, kv) => { val k = kv._1 val v = kv._2

map(k) = map.getOrElse(k, 0) + v map

}

}

 

println(map3)

}

}

2.普通WordCount案例

需求

单词计数:将集合中出现的相同的单词,进行计数,取计数排名前三的结果

需求分析

案例实操

object TestWordCount {

 

def main(args: Array[String]): Unit = {

// 单词计数:将集合中出现的相同的单词,进行计数,取计数排名前三的结

val stringList = List("Hello Scala Hbase kafka", "Hello Scala Hbase", "Hello Scala", "Hello")

 

// 1) 将每一个字符串转换成一个一个单词

val wordList: List[String] = stringList.flatMap(str=>str.split(" "))

//println(wordList)

 

// 2) 将相同的单词放置在一起

val wordToWordsMap: Map[String, List[String]] = wordList.groupBy(word=>word)

//println(wordToWordsMap)

 

// 3) 对相同的单词进行计数

// (word, list) => (word, count)

val wordToCountMap: Map[String, Int] = wordToWordsMap.map(tuple=>(tuple._1, tuple._2.size))

 

// 4) 对计数完成后的结果进行排序(降序)

val sortList: List[(String, Int)] = wordToCountMap.toList.sortWith {

(left, right) => { left._2 > right._2

}

}

 

// 5) 对排序后的结果取前 3 名

val resultList: List[(String, Int)] = sortList.take(3)

 

println(resultList)

}

3.复杂WordCount案例

方式一

object TestWordCount {

 

def main(args: Array[String]): Unit = {

 

// 第一种方式(不通用)

val tupleList = List(("Hello Scala Spark World ", 4), ("Hello Scala Spark", 3), ("Hello Scala", 2), ("Hello", 1))

 

val stringList: List[String] = tupleList.map(t=>(t._1 + " ") * t._2)

 

//val words: List[String] = stringList.flatMap(s=>s.split(" "))

val words: List[String] = stringList.flatMap(_.split(" "))

//在 map 中,如果传进来什么就返回什么,不要用_省略

val groupMap: Map[String, List[String]] = words.groupBy(word=>word)

//val groupMap: Map[String, List[String]] = words.groupBy(_)

 

// (word, list) => (word, count)

val wordToCount: Map[String, Int] = groupMap.map(t=>(t._1, t._2.size))

 

val wordCountList: List[(String, Int)] = wordToCount.toList.sortWith {

(left, right) => { left._2 > right._2

}

}.take(3)

 

//tupleList.map(t=>(t._1 + " ") * t._2).flatMap(_.split(" ")).groupBy(word=>word).map(t=>(t._1, t._2.size))

println(wordCountList)

}

方式二

object TestWordCount {

 

def main(args: Array[String]): Unit = {

 

val tuples = List(("Hello Scala Spark World", 4), ("Hello Scala Spark", 3), ("Hello Scala", 2), ("Hello", 1))

 

// (Hello,4),(Scala,4),(Spark,4),(World,4)

// (Hello,3),(Scala,3),(Spark,3)

// (Hello,2),(Scala,2)

// (Hello,1)

val wordToCountList: List[(String, Int)] = tuples.flatMap

{

t => {

val strings: Array[String] = t._1.split(" ") strings.map(word => (word, t._2))

}

}

 

// Hello, List((Hello,4), (Hello,3), (Hello,2), (Hello,1))

// Scala, List((Scala,4), (Scala,3), (Scala,2)

// Spark, List((Spark,4), (Spark,3)

// Word, List((Word,4))

val wordToTupleMap: Map[String, List[(String, Int)]] = wordToCountList.groupBy(t=>t._1)

 

val stringToInts: Map[String, List[Int]] = wordToTupleMap.mapValues {

datas => datas.map(t => t._2)

}

stringToInts

/*

val wordToCountMap: Map[String, List[Int]] = wordToTupleMap.map {

t => {

(t._1, t._2.map(t1 => t1._2))

}

}

 

val wordToTotalCountMap: Map[String, Int] = wordToCountMap.map(t=>(t._1, t._2.sum))

println(wordToTotalCountMap)

*/

}

}

二.队列

说明

Scala 也提供了队列(Queue)的数据结构,队列的特点就是先进先出。进队和出队的方法分别为 enqueue 和dequeue。

案例实操

object TestQueue {

 

def main(args: Array[String]): Unit = { val que = new mutable.Queue[String]() que.enqueue("a", "b", "c")

println(que.dequeue()) println(que.dequeue()) println(que.dequeue())

}

}

三.并行集合

说明

Scala 为了充分使用多核 CPU,提供了并行集合(有别于前面的串行集合),用于多核环境的并行计算。

案例实操

object TestPar {

 

def main(args: Array[String]): Unit = {

val result1 = (0 to 100).map{case _ => Thread.currentThread.getName}

val result2 = (0 to 100).par.map{case _ => Thread.currentThread.getName}

 

println(result1) println(result2)

}

}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com