欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mapreduce中怎么實現(xiàn)矩陣相乘

這期內容當中小編將會給大家?guī)碛嘘Pmapreduce中怎么實現(xiàn)矩陣相乘,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設、網(wǎng)站設計、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務株洲,十年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575

mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘,那么

mapreduce中怎么實現(xiàn)矩陣相乘

矩陣乘法要求左矩陣mapreduce中怎么實現(xiàn)矩陣相乘的列數(shù)與右矩陣mapreduce中怎么實現(xiàn)矩陣相乘的行數(shù)相等,mapreduce中怎么實現(xiàn)矩陣相乘的矩陣mapreduce中怎么實現(xiàn)矩陣相乘,與mapreduce中怎么實現(xiàn)矩陣相乘的矩陣mapreduce中怎么實現(xiàn)矩陣相乘相乘,結果為mapreduce中怎么實現(xiàn)矩陣相乘的矩陣mapreduce中怎么實現(xiàn)矩陣相乘

現(xiàn)在我們來分析一下,哪些操作是相互獨立的(從而可以進行分布式計算)。很顯然,mapreduce中怎么實現(xiàn)矩陣相乘的計算和mapreduce中怎么實現(xiàn)矩陣相乘的計算是互不干擾的;事實上,mapreduce中怎么實現(xiàn)矩陣相乘中各個元素的計算都是相互獨立的。這樣,我們在Map階段,可以把計算mapreduce中怎么實現(xiàn)矩陣相乘所需要的元素都集中到同一個key中,然后,在Reduce階段就可以從中解析出各個元素來計算mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘的其他元素的計算同理。

我們還需要注意,mapreduce中怎么實現(xiàn)矩陣相乘會被mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘……mapreduce中怎么實現(xiàn)矩陣相乘的計算所使用,mapreduce中怎么實現(xiàn)矩陣相乘會被mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘……mapreduce中怎么實現(xiàn)矩陣相乘的計算所使用。也就是說,在Map階段,當我們從HDFS取出一行記錄時,如果該記錄是mapreduce中怎么實現(xiàn)矩陣相乘的元素,則需要存儲成mapreduce中怎么實現(xiàn)矩陣相乘個<key, value>對,并且這mapreduce中怎么實現(xiàn)矩陣相乘個key互不相同;如果該記錄是mapreduce中怎么實現(xiàn)矩陣相乘的元素,則需要存儲成mapreduce中怎么實現(xiàn)矩陣相乘個<key, value>對,同樣的,mapreduce中怎么實現(xiàn)矩陣相乘個key也應互不相同;但同時,用于計算mapreduce中怎么實現(xiàn)矩陣相乘的、存放mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘……mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘……mapreduce中怎么實現(xiàn)矩陣相乘的<key, value>對的key應該都是相同的,這樣才能被傳遞到同一個Reduce中。

經(jīng)過以上分析,整個計算過程設計為:

(1)在Map階段,把來自表mapreduce中怎么實現(xiàn)矩陣相乘的元素mapreduce中怎么實現(xiàn)矩陣相乘,標識成mapreduce中怎么實現(xiàn)矩陣相乘條<key, value>的形式。其中mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘;把來自表mapreduce中怎么實現(xiàn)矩陣相乘的元素mapreduce中怎么實現(xiàn)矩陣相乘,標識成mapreduce中怎么實現(xiàn)矩陣相乘條<key, value>形式,其中mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘

于是乎,在Map階段,我們實現(xiàn)了這樣的戰(zhàn)術目的:通過key,我們把參與計算mapreduce中怎么實現(xiàn)矩陣相乘的數(shù)據(jù)歸為一類。通過value,我們能區(qū)分元素是來自mapreduce中怎么實現(xiàn)矩陣相乘還是mapreduce中怎么實現(xiàn)矩陣相乘,以及具體的位置。

(2)在Shuffle階段,相同key的value會被加入到同一個列表中,形成<key, list(value)>對,傳遞給Reduce,這個由Hadoop自動完成。

(3)在Reduce階段,有兩個問題需要自己問問:

  • 當前的<key, list(value)>對是為了計算mapreduce中怎么實現(xiàn)矩陣相乘的哪個元素?

  • list中的每個value是來自表mapreduce中怎么實現(xiàn)矩陣相乘或表mapreduce中怎么實現(xiàn)矩陣相乘的哪個位置?

第一個問題可以從key中獲知,因為我們在Map階段已經(jīng)將key構造為mapreduce中怎么實現(xiàn)矩陣相乘形式。第二個問題,也可以在value中直接讀出,因為我們也在Map階段做了標志。

接下來我們所要做的,就是把list(value)解析出來,來自mapreduce中怎么實現(xiàn)矩陣相乘的元素,單獨放在一個數(shù)組中,來自mapreduce中怎么實現(xiàn)矩陣相乘的元素,放在另一個數(shù)組中,然后,我們計算兩個數(shù)組(各自看成一個向量)的點積,即可算出mapreduce中怎么實現(xiàn)矩陣相乘的值。

示例矩陣mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘相乘的計算過程如下圖所示:

mapreduce中怎么實現(xiàn)矩陣相乘


其中map階段:

public static class MatrixMap extends Mapper<Object, Text, Text, Text>{
        private int sum3 = 0;  //存放矩陣a的行數(shù)
        private int sum4 = 0;  //存放矩陣b的行數(shù)
        @Override
        protected void map(Object key, Text value, Context context)
                throws IOException, InterruptedException {
            String[] lines = value.toString().split(",");
            String url = ((FileSplit)context.getInputSplit()).getPath().toString();
            //取出文件路徑名,判斷數(shù)據(jù)來源分別增加其行數(shù)
            if(url.contains("matrix3")) sum3++;
            if(url.contains("matrix4")) sum4++;
            for(int m = 0; m < lines.length; m++){
                // 遍歷矩陣列數(shù),分別與行數(shù)組成key為(i,k),value為(a,j,v)的數(shù)據(jù)輸出 
            if(url.contains("matrix3") && lines.length == matrix_j){
                for (int i = 1; i <= matrix_k; i++){
                    context.write(new Text(sum3+","+i), 
                            new Text("a,"+(m+1)+","+lines[m]));
                }    
            }else if(url.contains("matrix4") && lines.length == matrix_k){
                for (int i = 1; i <= matrix_i; i++){
                    context.write(new Text(i+","+(m+1)), 
                            new Text("b,"+sum4+","+lines[m]));
                }
            }
            }
        }
        
    }

reduce階段:

public static class MatrixReduce extends Reducer<Text, Text, Text, Text>{
        private Map<Integer, Integer> matrix_a;
        private Map<Integer, Integer> matrix_b;
        @Override
        protected void reduce(Text key, Iterable<Text> values, Context context)
                throws IOException, InterruptedException {
            matrix_a = new HashMap<Integer, Integer>();
            matrix_b = new HashMap<Integer, Integer>();
            for(Text value : values){
                //循環(huán)分辨values中值是矩陣a或是b的,并存入map集合a和b中
                String line = value.toString();
                if(line.startsWith("a,")){
                    String[] lines = line.split(",");
                    if(lines.length == 3) 
                        matrix_a.put(Integer.parseInt(lines[1]), 
                                Integer.parseInt(lines[2]));
                }else{
                    String[] lines = line.split(",");
                    if(lines.length == 3) 
                        matrix_b.put(Integer.parseInt(lines[1]), 
                                Integer.parseInt(lines[2]));
                }
            }
            int a_value = 0;
            int b_value = 0;
            int result = 0;
            //分別取出a和b集合中,計算結果放入result中
            for(int i = 1; i <= matrix_j; i++){
                if(matrix_a.get(i) != null && matrix_b.get(i) != null){
                    a_value = matrix_a.get(i);
                    b_value = matrix_b.get(i);
                    result += a_value * b_value;
                }
            }
            context.write(key, new Text(result+""));
            
        }
        
    }

主程序:

public static void run(String time, Configuration conf) 
            throws IOException, ClassNotFoundException, InterruptedException{
        // 需求輸出文件路徑
        String outpath = VALUE_FSNAME+
                "/data/test_out/zk/matrix-"+time;
        // 需求輸入文件路徑
        String input1 = VALUE_FSNAME+"/data/test_in/matrix3";
        String input2 = VALUE_FSNAME+"/data/test_in/matrix4";
        File jarFile = EJob.createTempJar("bin");
        @SuppressWarnings("deprecation")
        Job job = new Job(conf, "Test-Matrix");
        job.setJarByClass(TestMatrix1.class);
        job.setMapperClass(MatrixMap.class);
        job.setReducerClass(MatrixReduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);
        job.setNumReduceTasks(1);
        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        FileInputFormat.addInputPaths(job, input1+","+input2);;
        FileOutputFormat.setOutputPath(job, new Path(outpath));

        // 提交job
        if (job.waitForCompletion(true)) {
            System.err.println("計算完成!");
        } else {
            System.err.println("error!請檢查程序!");
        }
    
    }

最后,大家請看一下原始數(shù)據(jù):

matrix1:

1,2,3
4,5,0
7,8,9
10,11,12

matrix2:

10,15
0,2
11,9

上述就是小編為大家分享的mapreduce中怎么實現(xiàn)矩陣相乘了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標題:mapreduce中怎么實現(xiàn)矩陣相乘
本文地址:http://www.chinadenli.net/article36/jcossg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作外貿(mào)網(wǎng)站建設品牌網(wǎng)站設計軟件開發(fā)電子商務網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設