1. 程式人生 > >scala 兩種方法實現單詞計數

scala 兩種方法實現單詞計數

 val lines = List("hello world", "hello spark")
    val wordlist = lines.flatMap(line => line.split(" ")).map(word => (word, 1))
    //方法一:先groupBy再map
    wordlist.groupBy(_._1).map {
      case (word, list) => (word, list.size)
    }.foreach(println)

    //方法二:通過aggregate來實現map reduce,效率更高
    val seqop = (result: mutable.HashMap[String, Int], wordcount: (String, Int)) => {
      val addOne = (wordcount._1, result.getOrElse(wordcount._1, 0) + wordcount._2)
      result.+=(addOne)
    }
    val combop = (result1: mutable.HashMap[String, Int], result2: mutable.HashMap[String, Int]) => {
      result1 ++= result2
    }
    val result = wordlist.aggregate(mutable.HashMap[String, Int]())(seqop,combop)
    println(result)

從檔案讀取進行word count:

   val lines = Source.fromFile("test.txt").getLines()
    val seqop = (result: mutable.HashMap[String, Int], line: String) => {
      val wordcount = line.replace(",", " ").replace(".", " ").replace("(", " ").replace(")", " ").split(" ").filter(_.trim.length > 0).map(word => (word, 1))
      wordcount.foreach(wc => {
        val addOne = (wc._1, result.getOrElse(wc._1, 0) + wc._2)
        result += addOne
      })
      result
    }
    val combop = (result1: mutable.HashMap[String, Int], result2: mutable.HashMap[String, Int]) => {
      result1 ++= result2
    }

    val test = lines.aggregate(mutable.HashMap[String, Int]())(seqop, combop)
    println(test)

lines其實是一個迭代器,流式一行一行讀取,不要toList,否則讀取大檔案時可能出現記憶體溢位問題

相關推薦

scala 方法實現單詞計數

val lines = List("hello world", "hello spark") val wordlist = lines.flatMap(line => line.split(" ")).map(word => (word, 1))

跨域問題相關知識詳解(原生js和jquery方法實現jsonp跨域)

syn con 加載 developer 兩種方法 ray exe 編寫 分組 1、同源策略 同源策略(Same origin policy),它是由Netscape提出的一個著名的安全策略。同源策略是一種約定,它是瀏覽器最核心也最基本的安全功能,如果缺少了同源策略,則瀏覽

aNDROID方法實現MENU

music win pup andro com 兩種方法 hao123 popu oid pOpUpWINDOW%E6%98%BE%E7%A4%BA%E7%9A%84%E9%97%AE%E9%A2%98 http://music.hao123.com/songlist/4

淺談方法實現瀏覽器內多個標簽頁之間的通信

tools view -s data- oca microsoft oar art set 調用localstorge、cookies等本地存儲方式。 方法一: localstorge在一個標簽頁裏被添加、修改或刪除時,都會觸發一個storage事件,通過在另一個標簽頁裏監

方法實現Python二分查找算法

進行 n) == bsp highlight log range pre arr 一. arr=[1,3,6,9,10,20,30] def findnumber(l,h,number): mid=(l+h)//2 if arr[mid]==number:

SA:T1編寫主函數法和T2Matlab自帶的SA工具箱GUI法,方法實現對二元函數優化求解——Jason niu

lin plot itl 最優解 IT 主函數 alt 圖片 gui %SA:T1法利用Matlab編寫主函數實現對定義域[-5,5]上的二元函數求最優解—Jason niu [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 +

方法實現Linux不活動用戶登錄超時後自動登出

https linux ted 一段 ali blog fig home 服務 在平常的工作中,windows系統使用的比較多一些,身邊的很多同事都會對自己的電腦進行一些個性化設置,比如離開一段時間後自動鎖屏、自動關閉屏幕、自動註銷當前登錄等。在windows下可以這樣操作

簡單的實現圖片預覽, 通過原生ajax以及 jQuery方法實現圖片預覽,有更好的辦法可以留言喔................

XML HP OS image end php代碼 append sda ext 1.原生寫ajax實現圖片預覽:   結構:     <input type="file">       <img src="" > JavaScri

方法實現STM32F103向串列埠一直髮送資料(程式原始碼,已測試)

       串列埠是STM32最為重要的資源,在平時的硬體除錯和軟體除錯中都是不可或缺的工具,最近在測試一塊板子的通訊功能是否正常,我打算用板子A的串列埠USART1一直向串列埠傳送資料,用板子B的串列埠1接收資料,並將接收到的資料經過處理後顯示在LCD

方法實現Python二分查詢演算法 方法實現Python二分查詢演算法

兩種方法實現Python二分查詢演算法   一. ? 1 2

Java——用方法實現字串逆序

package com.zth; public class Test{ public static String fun1(String str){ //方法一 將字串轉換為字元陣列 char[] arr = str.toCharA

限制一個遠端會話的使用者(可用方法實現

要執行該過程,你必須是本地計算機上 Administrators 組的成員,或者你必須被委派了相應的許可權。如果計算機已加入某個域,則 Domain Admins 組的成員可能會執行該過程。作為最安全的操作,請考慮使用“執行方式”執行此過程。有關詳細資訊,請參閱預設本地組、預設組以及使用“執行方式”。 使用以

演算法--方法實現一個Add函式,讓個整數相加,但是不能使用+、-、*、/等四則運算子。

方法一:(網上都解釋的很好 這裡就不贅述了) int Add1(int num1,int num2) { int sum, carry; do { //因為位運算加法,0+1=1,1+0=1,0+0=0,1+1=0

基於鄰接矩陣和鄰接表的方法實現無向圖的BFS和DFS

        廣度優先搜尋(Breadth-First-Search)和深度優先搜尋(Deep-First-Search)是搜尋策略中最經常用到的兩種方法,特別常用於圖的搜尋. BFS的思想:       從一個圖的某一個頂點V0出發,首先訪問和V0相鄰的且未被訪問過的

LeetCode 206. Reverse Linked List(反轉連結串列)方法實現

本文用兩種方法實現連結串列的反轉(LeetCode 206. Reverse Linked List):①利用next指標穿針引線;②遞迴演算法。 題目: Reverse a singly linked list. Example: Input: 1->2-&g

python 實現 列表 選擇排序 演算法(方法實現

方法一:(remove方法) arr = [2, 3, 5, 6, 4, 1, 9] #找出最小元素 def findsmallest(arr): smallest = arr[0] #假設第一個元素為最小值 for i in range(1,len(arr)):

Python csv 方法 實現 鹼基合併 pandas

方法一:(list,逐行合併,速度略慢) import csv f = open("C:\\Users\\windows10\\Desktop\\Python練習\\文字流\\raw迴圈合併.csv") csv_reader = csv.reader(f,dial

python方法實現從1000萬個隨機數中找出top n元素(附c語言版)

轉載請註明地址:http://blog.csdn.net/echoutopia/article/details/51731269 很早之前看到一道面試題: 有一個長度為1000w個數組,每個元素互不重複,找出其中top n元素。 我感覺重複或者不重複都差不多,所以沒管不重複

淺談方法實現程序互斥的原理

對臨界資源的使用通過量種方法實現: 管程機制和訊號量機制(記錄性訊號量和AND訊號量); 記錄性訊號量機制: 在記錄性訊號機制裡面有S.value :記錄的是資源的訊號的量,通過去驗證每次這個值是否大於0,來判斷是否讓程序來使用此資源,但是,一旦這個值s.value=1就允許一個程序訪問該資源。

sqart平方根計算的方法實現(累加逼近和二分法)

       sqart函式是c/c++數學計算的一個常用函式,sqart開方的主要思路是利用逼近的方法進行實現,精度最低,計算效率最低的方式是直接累加逼近;精度較高而且使用範圍較廣的方法是牛頓迭代法