日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MR案例:Reduce-Join

發(fā)布時間:2025/4/9 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MR案例:Reduce-Join 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題描述:兩種類型輸入文件:address(地址)和company(公司)進行一對多的關(guān)聯(lián)查詢,得到地址名(例如:Beijing)與公司名(例如:Beijing JD、Beijing Red Star)的關(guān)聯(lián)信息。可參考MR案例:Map-Join

1.map階段:對比之前的單表關(guān)聯(lián)可知,reduce階段的key必須為關(guān)聯(lián)兩表的key,即address.Id = company.Id。則兩表經(jīng)過map處理輸出的key必須是Id。

Class Map<LongWritable, Text, LongWritable, Text>{method map(){// 獲取文件的每一行數(shù)據(jù),并以":"分割String[] line = value.toString().split(":");//split對應(yīng)的文件名String fileName = ((FileSplit) context.getInputSplit()).getPath().getName();//處理company文件的value信息:"Beijing Red Star:1"if (path.indexOf("company") >= 0){//<key,value> --<"1","company:Beijing Red Star">context.write(new LongWritable(line[1]), new Text("company" + ":" + line[0]));}//處理adress文件的value信息:"1:Beijing"else if (path.indexOf("address") >= 0){//<key,value> --<"1","address:Beijing">context.write(new LongWritable(line[0]), new Text("address" + ":" + line[1]));}} }

2.reduce階段:首先對輸入<key, values>即<”1”,[“company:Beijing Red Star”,”company:Beijing JD”,”address:Beijing”]>的values值進行遍歷獲取到單元信息value(例如”company:Beijing Red Star”),然后根據(jù)value中的標識符(company和address)將公司名和地址名分別存入到company集合和address集合,最后對company集合和address集合進行笛卡爾積運算得到company與address的關(guān)系,并進行輸出。

Class Reducer<LongWritable, Text, Text, Text>{method reduce(){//用來存儲 company 和 address 的集合List<String> companys = new ArrayList<String>();List<String> addresses = new ArrayList<String>();for(Text text : v2s){ String[] result = text.toString().split(":");//以 company 開頭的value存儲到 company 集合中if(result[0].equals("company")){companys.add(result[1]);}//以 address 開頭的value存儲到 address 集合中else if(result[0].equals("address")){addresses.add(result[1]);}}
/**
* 如果只判斷左表addresses.size()!=0;則轉(zhuǎn)化為 左外連接 --> LEFT OUTER JOIN
* 如果只判斷右表companys.size()!=0;則轉(zhuǎn)化為 右外連接 --> RIGHT OUTER JOIN
* 左右都不判斷,則轉(zhuǎn)化為 全外連接 --> FULL OUTER JOIN

*/
// 求笛卡爾積if(0 != companys.size()&& 0 != addresses.size()){for(int i=0;i<companys.size();i++){for(int j=0;j<addresses.size();j++){//<key,value>--<"Beijing JD","Beijing">context.write(new Text(companys.get(i)), new Text(addresses.get(j)));}}}} }
?

轉(zhuǎn)載于:https://www.cnblogs.com/skyl/p/4746005.html

總結(jié)

以上是生活随笔為你收集整理的MR案例:Reduce-Join的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。