真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

設(shè)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)矩陣相乘相乘,結(jié)果為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階段,當(dāng)我們從HDFS取出一行記錄時,如果該記錄是mapreduce中怎么實現(xiàn)矩陣相乘的元素,則需要存儲成mapreduce中怎么實現(xiàn)矩陣相乘對,并且這mapreduce中怎么實現(xiàn)矩陣相乘個key互不相同;如果該記錄是mapreduce中怎么實現(xiàn)矩陣相乘的元素,則需要存儲成mapreduce中怎么實現(xiàn)矩陣相乘對,同樣的,mapreduce中怎么實現(xiàn)矩陣相乘個key也應(yīng)互不相同;但同時,用于計算mapreduce中怎么實現(xiàn)矩陣相乘的、存放mapreduce中怎么實現(xiàn)矩陣相乘、mapreduce中怎么實現(xiàn)矩陣相乘……mapreduce中怎么實現(xiàn)矩陣相乘mapreduce中怎么實現(xiàn)矩陣相乘、mapreduce中怎么實現(xiàn)矩陣相乘……mapreduce中怎么實現(xiàn)矩陣相乘對的key應(yīng)該都是相同的,這樣才能被傳遞到同一個Reduce中。

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

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

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

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

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

  • 當(dāng)前的對是為了計算mapreduce中怎么實現(xiàn)矩陣相乘的哪個元素?

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

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

接下來我們所要做的,就是把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{
        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{
        private Map matrix_a;
        private Map matrix_b;
        @Override
        protected void reduce(Text key, Iterable values, Context context)
                throws IOException, InterruptedException {
            matrix_a = new HashMap();
            matrix_b = new HashMap();
            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集合中,計算結(jié)果放入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)矩陣相乘了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前名稱:mapreduce中怎么實現(xiàn)矩陣相乘
網(wǎng)頁網(wǎng)址:http://weahome.cn/article/jcossg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部