spark之非唯一鍵下TopN演算法

2021-10-01 18:33:47 字數 1664 閱讀 1333

什麼是非唯一鍵,假設所有給定的(k,

v)(k,v)

(k,v

)中,k

kk不唯一,所以必須增加額外的步驟來確保在topn演算法中鍵是唯一的,

舉個例子,假設有三個web伺服器(伺服器1,伺服器2,伺服器3),每個伺服器採取以下形式收集url:

(url,count)

對應各個web伺服器的(url,count)如下

伺服器1

伺服器2

伺服器3

(a,2)

(a,1)

(a,2)

(b,2)

(b,1)

(b,2)

(c,3)

(c,3)

c,1)

(d,2)

(e,1)

(d,2)

(e,1)

(f,1)

(e,1)

(g,2)

(g,2)

(f,1)

(g,2)

假設希望獲取最常訪問的2個url,如果先得到各個伺服器的本地top2,然後再計算所得到的3個本地top2列表中的top2,這個結果並不一定正確,原因是所有web伺服器上的所有url並不唯一。要想得到相同的結果,受邀要使得所有輸入建立衣服唯一的url,然後這些唯一的url分割槽到m

(>0)

m(>0)

m(>0)

個分割槽,接下來得到對應的各個分割槽的本地topn,最後在本地topn列表中確定最後topn,如下所示

聚集 (url,count)對

(a,5)

(b,5)

(c,7)

(d,4)

(e,3)

(f,2)

(g,6)

假設被分到兩個分割槽以後,如下所示

分割槽1分割槽2

(a,5)

(d,4)

(b,4)

(e,3)

(c,7)

(f,2)

(g,6)

完整**如下

package topn

import org.apache.spark.

import scala.collection.sortedmap

object topnununique )

//歸約重複鍵盤

val uniquekeys=kv.reducebykey(_+_)

//建立本地topn

var sortedmap=sortedmap.empty[int,string]

itr.foreach}}

sortedmap.takeright(n.value).toiterator

})//分布式下進行聚合操作

val createcombiner=(v : int)=>v

val mergevalue=(a: int,b: int)=>(a+b)

.map(_.swap)

.groupbykey()

.sortbykey(false)

.take(n.value)

case(k,v)=>println(s"$k \t $")}}}

執行結果如下

關於唯一鍵 Unique

sql create table test ranbo id number table created sql alter table test ranbo add constraint test ranbo uk unique id table altered sql insert into te...

Mysql 唯一鍵約束

3 唯一鍵約束也是分為兩種 4 刪除唯一鍵約束 乙個表中可以有多個唯一鍵約束 唯一鍵約束意味著,唯一,可以為null 唯一鍵的約束名可以自己指定,也可以預設 建立唯一鍵約束,也會在對應列上建立索引。而且刪除唯一鍵約束的方式是通過刪除對應索引來實現的。create table 資料庫名.表名 欄位名1...

主鍵 唯一鍵 唯一索引區別

主鍵 1.可以定義一列或多列為主鍵。不允許空 null 主健可作外健,唯一索引不可 2.定義乙個主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特殊型別。唯一鍵 唯一性約束 1.唯一性約束用來限制不受主鍵約束的列上的資料的唯一性,用於作為訪問某行的可選手段,指定列上都不允許有相同的值,允許空 null ...