1. 程式人生 > >scala 對大資料量排序求中位數 lookup方法

scala 對大資料量排序求中位數 lookup方法

val rdd=sc.makeRDD(Array(1,8,6,4,9,3,76,4))
val sorted = rdd.sortBy(identity).zipWithIndex().map {
  case (v, idx) => (idx, v)
}

val count = sorted.count() 
val median: Double = if (count % 2 == 0) {
  val l = count / 2 - 1
  val r = l + 1
  (sorted.lookup(l).head + sorted.lookup(r).head).toDouble
/ 2 } else sorted.lookup(count / 2).head.toDouble println(median)

首先根據元素排序(sortBy),得到有序RDD

RDD[Int]=(1,3,4,4,6,8,9,76)

WithIndex後與index調換順序.

(1,1),(2,3),(3,4),(4,4),(5,6),(6,8),(7,9),(8,76)

然後如果有偶數個的話,中位數就是最中間兩個數的平均數

lookup

lookup是根據map中的鍵來取出相應的值的,
如上面的sorted.lookup(1) ,得到的結果是一個序列Seq[Int]


如果sorted是

RDD((1,(1"a",1.0)),(1,(2,"b",9.1))

sorted.lookup(1)得到的就是Seq[(Int,String,Double)],是鍵為1的所有值的序列,

println(sorted.lookup(1))
//是
WrappedArray((1,a,1.0),(2,b,9.0))
sorted.lookup(1).head是第一項,即(1,a,1.0),
sorted.lookup(1).tail是第二項,即Seq[(Int,String,Double)]

相關推薦

scala 料量排序位數 lookup方法

val rdd=sc.makeRDD(Array(1,8,6,4,9,3,76,4)) val sorted = rdd.sortBy(identity).zipWithIndex().map { case (v, idx) => (idx, v) }

【機器學習】基於python料量CSV進行操作

在我們日常學習之中,往往會遇到各種各樣的資料。但有時候其龐大的資料量,使得我們無法使用一般的辦公軟體進行操作,與此同時直接將所有資料取到記憶體之中,也有存在溢位的風險。所以,在這種情況下,採用逐行存取的方式對資料進行操作是十分必要的。本文簡單的使用python最為基礎的函式實

料量的處理思路

  最近要用程式對百萬級別的資料量進行處理,綜合性能和程式碼執行時間,來考慮如何書寫高質量的程式碼.   首先就是讀資料的問題,由於資料量比較大,我們可以考慮根據唯一的主鍵id來取資料,這樣速度比較快,而且數量不能太大,讀取Mysql資料庫,資料超過3萬,速度就下降很明顯了

spark + ansj 料量中文進行分詞

    目前的分詞器大部分都是單機伺服器進行分詞,或者使用hadoop mapreduce對儲存在hdfs中大量的資料文字進行分詞。由於mapreduce的速度較慢,相對spark來說程式碼書寫較繁瑣。本文使用spark + ansj對儲存在hdfs中的中文文字

料量高併發訪問SQL優化方法

保證在實現功能的基礎上,儘量減少對資料庫的訪問次數;通過搜尋引數,儘量減少對錶的訪問行數,最小化結果集,從而減輕網路負擔;能夠分開的操作儘量分開處理,提高每次的響應速度;在資料視窗使用SQL時,儘量把使用的索引放在選擇的首列;演算法的結構儘量簡單;在查詢時,不要過多地使用萬用

四種快排與兩種歸併和堆和插入排序 料量執行時間比較

#include"iostream" #include"iomanip" #include"stdlib.h" #include"time.h" #include"string" /*由於我電腦記憶體有限所以資料量最大能執行在20w*/ //三路快排適用於有大量重複值的資

POI 將按日期分表的資料彙總到一個excel 料量

一. 簡介            現在有按時間分的使用者表,要在每月一號將這些表的資料彙總到一個excel中。每張表的資料量很大。            昨天通宵搞得,只為紀念,方便以後遇見同樣的需求做參考。            之前是想著每天匯出一個excel, 然

地方的索引可以讓你的料量的查詢效率飛起來

前言 之前在做專案的時候,接觸到的千萬級以上的表資料不是太多,對於聯合索引的認知不是太深刻,用索引與不用索引以及索引的建立順序和規則之前的區別不是太明顯,最近手頭有優化查詢千萬級資料量的慢sql的任務,優化前,查詢時間達到了60秒,導致前端請求掛起,做了相應的優化後,查詢千萬級別資料時,速度基本保持在零點

C#將dataGridView顯示的資料匯出到Excel(料量超實用版)

       開發中很多情況下需要將dataGridView控制元件中顯示的資料結果以Excel或者Word的形式匯出來,本例就來實現這個功能。由於從資料庫中查找出某些資料列可能沒必要顯示出來,在dataGridView中將對應的列隱藏了,這時匯出時就會將隱藏的列匯出來,顯

MySQL料量分頁查詢方法及其優化 ---方法1: 直接使用資料庫提供的SQL語句 ---語句樣式: MySQL,可用如下方法: SELECT * FROM 表名稱 LIMIT M,N ---適

測試實驗 1.   直接用limit start, count分頁語句, 也是我程式中用的方法: select * from product limit start, count 當起始頁較小時,查詢沒有效能問題,我們分別看下從10, 100, 1000, 10000開始分頁的執行時間(每頁取20條), 如

.NetEF針對料量查詢超時的一種優化

舊程式碼:--receiptIds   id集合,每次查1000左右var mappingList = new List<FinanceSettlementMapping>();mappingList.AddRange(SettlementMappingRepos

POI3.8 料量的excel表格處理

POI之前的版本不支援大資料量處理,如果資料過多則經常報OOM錯誤,有時候調整JVM大小效果也不是太好。3.8版本的POI新出來了SXSSFWorkbook,可以支援大資料量的操作。 3.8版本的PO

料量實時統計排序分頁查詢 優化總結

大資料量實時統計排序分頁查詢(併發數較小時)  的瓶頸不是函式(count,sum等)執行, 不是having, 也不是order by,甚至不是表join, 導致慢的原因就在於“資料量太大本身” 化整為零 就是將表劃分為M份相互獨立的部分,可以是分表,也可以是不分表

oracle料量的測試資料

CREATE     TABLE TEST_EXPORT NOLOGGING PARALLEL 4 AS SELECT     LEVEL           AS ID,     LEVEL||'NAME'   AS NAME,     LEVEL||'REMARK' A

Sybase 料量(100W條)分頁 jdbc實現目前要求無排序

首次分頁大概為10秒左右。以後翻頁基本上是瞬間完成。要求是無排序情況下。 分析:sybase不提供分頁方法。top函式還不能放在子查詢語句中。使用hibernate分頁前幾頁和後幾頁沒問題,如果資料量大翻到30000頁時就記憶體溢位了。而且效率慢。 使用儲存過程分

MySQL針對料量常用技術:查詢優化,資料轉移

  如今隨著網際網路的發展,資料的量級也是撐指數的增長,從GB到TB到PB。對資料的各種操作也是愈加的困難,傳統的關係性資料庫已經無法滿足快速查詢與插入資料的需求。這個時候NoSQL的出現暫時解決了這一危機。它通過降低資料的安全性,減少對事務的支援,減少對複雜查詢的支援,來獲取效能上的提升。但是,在有些場合

Qt5表格處理料量

https://www.cnblogs.com/foohack/p/7531446.html在Qt中如果是普通專案,GUI處理展現的資料量不大,一般用QTableWidget,QTreeWidget這樣的控制元件就滿足了,但是如果資料量行數達到了幾萬行,那麼Widget的展示

C++標準模板庫list料量情況下析構效率的研究

list在程式設計中是一種十分常用的序列式容器,如果你的程式更注重容器以下特性時,list可謂首選容器: 1、資料按原本順序儲存(不需要排序) 2、容器可以高效在任意位置插入、刪除資料 3、迭代器不會因插入與刪除等操作而失效(當然被刪除元素的迭代器除外) 4、不需要隨機訪問

ACR095 刪一個位數 貪心組合數 行列變換模擬(搜索)

names col main ext ati next opened alt closed A B #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,si

料量的方案收集--AdMaster 如何駕馭百億級Key實時Redis 叢集

注:本文轉載自公眾號AdMaster 作為技術驅動的營銷資料公司,AdMaster每天處理超過100億的資料請求,每天對1000億資料進行上千種維度計算,每天增加超過5T資料量,為來自各行業的客戶提供7*24小時資料應用服務。在這樣領先的技術佈局下,無論是資料實時性還是資料安全,都能得到