hadoop處理前N個最值問題

2021-09-02 10:18:35 字數 1185 閱讀 2027

例子為100w 條資料 取出前十個最值(純本人看完課程後的手寫,沒有參考網上,結果應該沒問題的,也沒找到標準答案寫法。。)

首先,由於值都是double,預設的排序方式是公升序,這裡面我們取得是降序,所以自定義hadoop物件,並實現writablecomparable介面,然後覆蓋compareto方法。

class mysuperkey implements writablecomparable

public mysuperkey(long mykey)

@override

public void readfields(datainput in) throws ioexception

@override

public void write(dataoutput out) throws ioexception

@override

public int hashcode()

@override

public boolean equals(object obj)

longwritable lvv=(longwritable)obj;

return (this.mykey==lvv.get());

}@override

public int compareto(mysuperkey o)

}

由於在map函式中執行後 需要對相同的key值進行分組,但對於自己建立的物件,無法判斷是否是相同的,hadoop基礎型別是可以的,此時,需要實現rawcomparator介面,並覆蓋compare方法,並在job執行的時候,加上

job.setgroupingcomparatorclass(mygroupingcomparator.class);

下面是自定義的分組物件

class mygroupingcomparator implements rawcomparator

@override

public int compare(byte arg0, int arg1, int arg2, byte arg3, int arg4,

int arg5)

}

下面覆蓋map和reduce方法

下面寫main函式 ,執行job

Mysql取分組後前N個值

表結構如下 create table test group limit row id varchar 33 id int 11 num bigint 11 log varchar 33 insert into test group limit row id id num log values 1 1...

動態求前n個最小值 最大值

注 由於最小值和最大值的分析過程完全相同,這裡我們只討論最小值的分析流程,最大值同理 每次給定乙個數值,詢問此數值以及之前給定數值中最小的n個數 例如給定數值的順序為 8 7 1 2 9 4,設n 3 乙個最直觀的方法是,每次新增新的資料後,將當前所有資料進行排序,選擇較小的n個 一次排序最快也要 ...

python字典值排序並取出前n個key值

今天在寫乙個演算法的過程中,得到了乙個類似下面的字典 想要獲取字典裡value值前3的key,就產生了如下 直接貼 def order dict dicts,n result result1 p sorted k,v for k,v in dicts.items reverse true s set...