例子為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...