大資料筆記07 MR案例開發

2021-08-29 07:46:03 字數 4022 閱讀 6491

溫度統計

推薦好友

統計輸入的檔案中,每個單詞出現了幾次

在map中將輸入的每條資料切割成單詞,將key為單詞,value為1的計算結果輸出

預設的分組器會將相同key(單詞)的資料分為一組,輸入reduce

在reduce中,遍歷輸入的資料,將value加和(sum),輸出單詞和sum到檔案中

public

class

mywc

//設定輸出路徑

fileoutputformat.

setoutputpath

(job, outpath)

;//設定map的class

job.

class);

//設定map輸出的key、value型別

job.

setmapoutputkeyclass

(text.

class);

job.

setmapoutputvalueclass

(intwritable.

class);

//設定reduce的class

job.

setreducerclass

(mywcreducer.

class);

//設定reduce的個數

job.

setnumreducetasks(2

);//執行job true表示返回執行資訊

job.

waitforcompletion

(true);

}}

public

class

extends

}}

public

class

mywcreducer

extends

reducer

context.

write

(key,

newintwritable

(sum));

}}

對下例所示的溫度資料,篩選出每個月溫度最高的兩天

1949-10-01 14:21:02	34c

1949-10-01 19:21:02 38c

1949-10-02 14:01:02 36c

1950-01-01 11:21:02 32c

1950-10-01 12:21:02 37c

1951-12-01 12:21:02 23c

1950-10-02 12:21:02 41c

1950-10-03 12:21:02 27c

1951-07-01 12:21:02 45c

1951-07-02 12:21:02 46c

1951-07-03 12:21:03 47c

在map中將切割資訊,捨棄時間,將年月日和溫度封裝到自定義物件中作為key,value為null

自定義分組器將年和月相同的資料分到一組

在reduce中,遍歷key(已根據年、月、溫度排序),輸出前兩條日期不重複的資料,即溫度最高的兩天

public

class

mytq

implements

writablecomparable

//序列化方法

@override

public

void

write

(dataoutput out)

throws ioexception

//反序列化

@override

public

void

readfields

(datainput in)

throws ioexception

//重寫compareto方法

//完成三次排序

@override

public

intcompareto

(mytq o)

else

}else

/** * 直接返回yc、mc、this-o

* this的值小於o的值返回負數,大於返回正數

* 最終排序的結果是公升序

* 若改為o-this 排序結果是降序

*/}}

public

class

mytqmr

fileoutputformat.

setoutputpath

(job, path)

;//設定map和輸出的kv型別

job.

class);

job.

setmapoutputkeyclass

(mytq.

class);

job.

setmapoutputvalueclass

(nullwritable.

class);

//設定reduce類

job.

setreducerclass

(mytqreducer.

class);

//設定自定義的分組器

job.

setgroupingcomparatorclass

(mytqgroupcomparator.

class);

//執行任務

job.

waitforcompletion

(true);

}}

public

class

extends

}

public

class

mytqreducer

extends

reducer

//讀第二條資料時 若日期相等則跳過 讀下一條 不相等時才進入這段**

if(flag !=

0&& day != key.

getday()

) flag++;}

}}

public

class

mytqgroupcomparator

extends

writablecomparator

//重寫compare(writablecomparable a, writablecomparable b)方法

@override

public

intcompare

(writablecomparable a, writablecomparable b)

else

}}

和intwritable、text等類似是對資料型別進行可序列化封裝的封裝類,但nullwritable類似乙個佔位符,用於value值需要為空的情況,不會輸出到檔案中,也能避免因map中輸出value為null而造成之後出現空指標錯誤

無法例項化(構造方法為private),通過靜態方法get()獲取例項化物件,詳見原始碼

自定義物件時需要實現該介面,重寫序列化方法write(dataoutput out)、反序列化方法readfields(datainput in)、排序方法int compareto(mytq o)

如下例所示的好友表,每行第乙個詞表示其本人,剩餘詞表示其好友

找出間接好友關係,如hello和hadoop同為tom的好友且他們兩人不是直接好友,則兩人為間接好友

統計每對簡介好友出現的次數,作為好友推薦的依據

tom	hello	hadoop	cat

world hadoop hello hive

cat tom hive

mr hive hello

hive cat hadoop world hello mr

hadoop tom hive world

hello tom world hive mr

在map中,

分組器在reduce中,

大資料GIS系列 2 空間大資料處理與分析案例

高速發展的資訊化技術使得與空間位置相關的資料積累越來越多,空間資料的儲存 分析與視覺化傳統技術已逐漸無法滿足需求,亟需使用承載力更強 可靠性更高 計算速度更快的方法。分布式技術為空間大資料的處理與分析提供了有效的解決方案,下面就以乙個十億資料量級別的計程車位置資料為例,為大家介紹如何使用分布式技術進...

大資料筆記

分類 利用資料學習模型或得到規則,用於 或者判定乙個輸入所屬的類,或者計算屬於某一類的概率 給定乙個輸入,所產生的輸出是乙個布林值。回歸 y g x w g 模型 w 引數 關鍵 確定損失函式,以及最小化損失函式的過程 梯度下降 隨機梯度下降 批量 梯度下降 給出損失函式f wx 目的是優化w使f ...

大資料學習筆記 1 1 了解大資料

三 bigtable 大表 nosql資料庫 hbase 首先引入兩個個大資料應用場景 從以上兩個例子可以引出大資料的兩個核心問題 資料的儲存 分布式的檔案系統 hdfs hadoop distributed file system 資料的計算 資料的計算 不是演算法 分布式的計算 mapreduc...