国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Scala之集合(3)

這篇具有很好參考價(jià)值的文章主要介紹了Scala之集合(3)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Scala之集合(3)

?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-424152.html

目錄

?

WordCount案例:

需求分析與步驟:

拆分:

聚合:

格式轉(zhuǎn)化:

方法1:

方法2:

排序:

方法1:

方法2:

取top3:

整體化簡(jiǎn)后的代碼:

WordCoount案例升級(jí):

給定數(shù)據(jù):

方法1:

方法2:

方法3:

并行集合:


?

WordCount案例:

需求分析與步驟:

Scala之集合(3)

拆分:

val list: List[String] = stringList.flatMap((s) => {
    s.split(" ")
    })

聚合:

聚合過(guò)程較為繁瑣,分為以下幾步:

(1)先將切割后的List集合轉(zhuǎn)變成二元組并且value設(shè)置為1

    val tuples: List[(String, Int)] = list.map(s => (s, 1))

(2)對(duì)現(xiàn)在的二元組進(jìn)行分組(相同的key)

    val map: Map[String, List[(String, Int)]] = tuples.groupBy(tuple => tuple._1)

格式轉(zhuǎn)化:

方法1:

通過(guò)map映射映射成我們需要的形式

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

方法2:

方法2使用的是value特定的函數(shù)

val map2: Map[String, Int] = map.mapValues(value => value.size)

排序:

方法1:

現(xiàn)在的集合是Map集合,需要排序所以要轉(zhuǎn)換成List再調(diào)用排序函數(shù)(sortBy方法)

 val list1: List[(String, Int)] = map2.toList
    val tuples1: List[(String, Int)] = list1.sortBy(map1 => map1._2).reverse

方法2:

采用sortWith方法:

    val list2: List[(String, Int)] = list1.sortWith((map1l, map2r) => map1l._2 > map2r._2)

取top3:

val list3: List[(String, Int)] = list2.take(3)

整體化簡(jiǎn)后的代碼:

  val tuples1: List[(String, Int)] = stringList.map(_.split(" "))
     .flatten
     .map(s => (s, 1))
     .groupBy( _._1)
     .map(tuple => (tuple._1, tuple._2.size))
     .toList
     .sortBy(_._2)(Ordering[Int].reverse)
     .take(3)

WordCoount案例升級(jí):

給定數(shù)據(jù):

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

與上述數(shù)據(jù)不同

方法1:

方法一就是把數(shù)據(jù)打散變成普通版數(shù)據(jù)再按照普通版數(shù)據(jù)進(jìn)行操作

(1)切割與扁平化:

val list1: List[String] = list.flatMap(s => {
  s.split(" ")
})

(2)將集合中方法都改變結(jié)構(gòu)變成二元組(value=1)

    val tuples: List[(String, Int)] = list1.map(s => (s, 1))

(3)按照key進(jìn)行分組

    val map: Map[String, List[(String, Int)]] = tuples.groupBy(tup => tup._1)

(4)通過(guò)map進(jìn)行格式轉(zhuǎn)換成最終格式

    val list2: List[(String, Int)] = map.map(tp => (tp._1, tp._2.size))

(5)轉(zhuǎn)換成List集合并且進(jìn)行排序取前三(按業(yè)務(wù)要求)

 .toList
      .sortWith((tpl, tpr) => tpl._2 > tpr._2)
      .take(3)

總結(jié):上述方法理解簡(jiǎn)單,但是比較消耗內(nèi)存? 當(dāng)每個(gè)字符串的次數(shù)較大時(shí) 是非常消耗內(nèi)存的,消耗時(shí)間

方法2:

方法2采取的是不打散策略,直接使用聚合的策略

(1)對(duì)集合進(jìn)行切割并且轉(zhuǎn)換成元組(key,value)

val list3: List[List[(String, Int)]] = tupleList.map(s => {
  val strings: Array[String] = s._1.split(" ")
  val list: List[String] = strings.toList
  list.map(list => {
    (list, s._2)
  })
}
)

(2)進(jìn)行扁平化

    val flatten: List[(String, Int)] = list3.flatten

(3)進(jìn)行分組

    val map1: Map[String, List[(String, Int)]] = flatten.groupBy(tuple => tuple._1)

(4)對(duì)value值進(jìn)行改變? 改變?yōu)槲覀冃枰母袷?/p>

    val map2: Map[String, Int] = map1.mapValues(value => value.map(tuple => tuple._2).sum)

Scala之集合(3)

方法3:

?方法3是在我們分組的基礎(chǔ)之上對(duì)value進(jìn)行調(diào)用歸約函數(shù),直接對(duì)value進(jìn)行累加

    val map3: Map[String, Int] = map.mapValues(value => value.foldLeft(0)((res, elem) => res + elem._2))

并行集合:

并行集合涉及多線程

Scala 為了充分使用多核 CPU,提供了并行集合(有別于前面的串行集合),用于多核
環(huán)境的并行計(jì)算。
在我們?nèi)粘S玫膍ain函數(shù)是單線程
在集合的后邊加上.par后? 變成了并行集合? 使用多線程打?。ㄍ瑫r(shí)也是亂序的)
在同一個(gè)線程內(nèi)是有序的但是線程之間是無(wú)序的
集合終于終結(jié)了!?。。?!
?

?

到了這里,關(guān)于Scala之集合(3)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • C++類和對(duì)象-多態(tài)->案例1計(jì)算器類、案例2制作飲品、案例3電腦組裝需求分析和電腦組裝具體實(shí)現(xiàn)

    C++類和對(duì)象-多態(tài)->案例1計(jì)算器類、案例2制作飲品、案例3電腦組裝需求分析和電腦組裝具體實(shí)現(xiàn)

    #includeiostream using namespace std; #includestring //分別利用普通寫(xiě)法和多態(tài)技術(shù)實(shí)現(xiàn)計(jì)算器 //普通寫(xiě)法 class Calculator { public: ?? ?int getResult(string oper) ?? ?{ ?? ??? ?if (oper == \\\"+\\\") { ?? ??? ??? ?return m_Num1 + m_Num2; ?? ??? ?} ?? ??? ?else if (oper == \\\"-\\\") { ?? ??? ??? ?return m_Num

    2024年02月20日
    瀏覽(26)
  • WordCount 在 MapReduce上運(yùn)行詳細(xì)步驟

    WordCount 在 MapReduce上運(yùn)行詳細(xì)步驟

    注意:前提條件hadoop已經(jīng)安裝成功,并且正常啟動(dòng)。 1.準(zhǔn)備好eclipse安裝包,eclipse-jee-juno-linux-gtk-x86_64.tar.gz,使用SSH Secure File Transfer Client工具把安裝包上傳于Hadoop集群的名稱節(jié)點(diǎn)。 ? 2.上傳Hadoop在eclipse上運(yùn)行插件:haoop-eclipse-plugin-2.6.0.jar ? 3.更改eclipse-jee-juno-linux-gtk-x86_64.t

    2023年04月16日
    瀏覽(18)
  • 大數(shù)據(jù)-Storm流式框架(二)--wordcount案例

    大數(shù)據(jù)-Storm流式框架(二)--wordcount案例

    storm軟件包中l(wèi)ib目錄下的所有jar包 WordCountTopology.java LineSpout.java SplitBolt.java CountBolt.java 右鍵運(yùn)行WordCountTopology S torm配置項(xiàng) 說(shuō)明 java.library.path Storm本身依賴包的路徑,存在多個(gè)時(shí)用冒號(hào)分隔 storm.local.dir Storm使用的本地文件系統(tǒng)目錄(必須存在并且storm進(jìn)程可讀寫(xiě))。默認(rèn)是sto

    2024年02月08日
    瀏覽(17)
  • 虛擬機(jī)+Hadoop下MapReduce的Wordcount案例

    虛擬機(jī)+Hadoop下MapReduce的Wordcount案例

    環(huán)境:ubuntu18.04 前提:Hadoop已經(jīng)搭建好 抄作業(yè)記得改標(biāo)題 輸入內(nèi)容(可以自定義,抄作業(yè)別寫(xiě)一樣的) yarn-site.xml 內(nèi)容如下,注意第一個(gè)property要改: ·輸入hadoop classpath(任意路徑下均可),將返回的內(nèi)容復(fù)制在第一個(gè)property的value中 *修改配置文件之后要重啟hadoop(關(guān)了又

    2024年02月07日
    瀏覽(14)
  • 【入門(mén)Flink】- 02Flink經(jīng)典案例-WordCount

    【入門(mén)Flink】- 02Flink經(jīng)典案例-WordCount

    需求:統(tǒng)計(jì)一段文字中,每個(gè)單詞出現(xiàn)的頻次 基本思路:先逐行讀入文件數(shù)據(jù),然后將每一行文字拆分成單詞;接著按照單詞分組,統(tǒng)計(jì)每組數(shù)據(jù)的個(gè)數(shù)。 1.1.數(shù)據(jù)準(zhǔn)備 resources目錄下新建一個(gè) input 文件夾,并在下面創(chuàng)建文本文件words.txt words.txt 1.2.代碼編寫(xiě) 打印結(jié)果如下:(

    2024年02月06日
    瀏覽(29)
  • Hadoop之——WordCount案例與執(zhí)行本地jar包

    Hadoop之——WordCount案例與執(zhí)行本地jar包

    目錄 一、WordCount代碼 (一)WordCount簡(jiǎn)介 1.wordcount.txt (二)WordCount的java代碼 1.WordCountMapper 2.WordCountReduce 3.WordCountDriver (三)IDEA運(yùn)行結(jié)果 (四)Hadoop運(yùn)行wordcount 1.在HDFS上新建一個(gè)文件目錄 2.新建一個(gè)文件,并上傳至該目錄下 3.執(zhí)行wordcount命令 4.查看運(yùn)行結(jié)果 5.第二次提交報(bào)錯(cuò)原因 6.進(jìn)

    2024年02月08日
    瀏覽(43)
  • YARN On Mapreduce搭建與wordCount案例實(shí)現(xiàn)

    YARN On Mapreduce搭建與wordCount案例實(shí)現(xiàn)

    YARN的基本思想是將資源管理RM,和作業(yè)調(diào)度、監(jiān)控功能拆分成單獨(dú)的守護(hù)進(jìn)程。這個(gè)思想中擁有一個(gè)全局的資源管理器以及每個(gè)應(yīng)用的MASTER,AM。每一個(gè)應(yīng)用 都是單個(gè)作業(yè)或者一個(gè)DAG作業(yè)。 架構(gòu)圖: mapred-site.xml yarn-site.xml 配置節(jié)點(diǎn)分發(fā)到其他節(jié)點(diǎn)。 啟動(dòng)yarn 啟動(dòng)rm資源管理 訪

    2023年04月24日
    瀏覽(18)
  • MapReduce入門(mén)(一)—— MapReduce概述 + WordCount案例實(shí)操

    MapReduce入門(mén)(一)—— MapReduce概述 + WordCount案例實(shí)操

    MapReduce知識(shí)點(diǎn)總覽圖 MapReduce 是 一個(gè)分布式運(yùn)算程序的編程框架 ,是用戶開(kāi)發(fā)“基于 Hadoop 的數(shù)據(jù)分析應(yīng)用”的核心框架。 MapReduce 核心功能是 將用戶編寫(xiě)的業(yè)務(wù)邏輯代碼 和 自帶默認(rèn)組件 整合成一個(gè) 完整的分布式運(yùn)算程序 ,并發(fā)運(yùn)行在一個(gè) Hadoop 集群上。 1.2.1 優(yōu)點(diǎn) 1 )M

    2023年04月21日
    瀏覽(25)
  • 【Scala】集合

    【Scala】集合

    目錄 類型 不可變集合 可變集合 數(shù)組 不可變 可變數(shù)組 不可變數(shù)組與可變數(shù)組的轉(zhuǎn)換 多維數(shù)組 List list運(yùn)算符 可變 ListBuffer Set 集合 不可變 Set 可變 mutable.Set Map 集合 可變 Map 元組 操作 通用操作 衍生集合操作 計(jì)算函數(shù) 排序 sorted sortBy sortWith 計(jì)算高級(jí)函數(shù) 實(shí)例 WordCount 案例

    2023年04月09日
    瀏覽(21)
  • Scala集合 - List

    水善利萬(wàn)物而不爭(zhēng),處眾人之所惡,故幾于道?? 一、不可變List ? 1. 創(chuàng)建List ? 2. 取指定的數(shù)據(jù) ? 3. 向List中添加元素 ? 4. 遍歷List ? 5. 集合間合并 - 扁平化處理 二、可變List ? 1. 創(chuàng)建可變集合對(duì)象 ? 2. 添加元素 ? 3. 修改元素 ? 4. 刪除元素 1. 創(chuàng)建List ??創(chuàng)建一個(gè)L

    2024年02月15日
    瀏覽(23)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包