最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 矩陣乘法的mapreduce程序實現(xiàn)

 更新時間:2017年06月07日 14:49:09   作者:南尋  
這篇文章主要介紹了java 矩陣乘法的mapreduce程序實現(xiàn)的相關資料,需要的朋友可以參考下

java 矩陣乘法的mapreduce程序實現(xiàn)

map函數(shù):對于矩陣M中的每個元素m(ij),產生一系列的key-value對<(i,k),(M,j,m(ij))>

其中k=1,2.....知道矩陣N的總列數(shù);對于矩陣N中的每個元素n(jk),產生一系列的key-value對<(i , k) , (N , j ,n(jk)>, 其中i=1,2.......直到i=1,2.......直到矩陣M的總列數(shù)。

map

package com.cb.matrix;

import static org.mockito.Matchers.intThat;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapreduce.Mapper;

import com.sun.org.apache.bcel.internal.generic.NEW;


public class MatrixMapper extends Mapper<Object, Text, Text, Text> {
 private Text map_key=new Text();
 private Text map_value= new Text();
 private int columnN;
 private int rowM;
 /**
 * 執(zhí)行map()函數(shù)前先由conf.get()得到main函數(shù)中提供的必要變量
 * 也就是從輸入文件名中得到的矩陣維度信息
 */
 
 @Override
 protected void setup(Mapper<Object, Text, Text, Text>.Context context) throws IOException, InterruptedException {
 // TODO Auto-generated method stub
 Configuration config=context.getConfiguration();
 columnN=Integer.parseInt(config.get("columnN"));
 rowM =Integer.parseInt(config.get("rowM"));
 }
 
 @Override
 protected void map(Object key, Text value, Mapper<Object, Text, Text, Text>.Context context)
  throws IOException, InterruptedException {
 // TODO Auto-generated method stub
 //得到文件名,從而區(qū)分輸入矩陣M和N
 FileSplit fileSplit=(FileSplit)context.getInputSplit();
 String fileName=fileSplit.getPath().getName();
 
 if (fileName.contains("M")) {
  String[] tuple =value.toString().split(",");
  int i =Integer.parseInt(tuple[0]);
  String[] tuples=tuple[1].split("\t");
  int j=Integer.parseInt(tuples[0]);
  int Mij=Integer.parseInt(tuples[1]);
  for(int k=1;k<columnN+1;k++){
  map_key.set(i+","+k);
  map_value.set("M"+","+j+","+Mij);
  context.write(map_key, map_value);
  }
  
 }
 else if(fileName.contains("N")){
  String[] tuple=value.toString().split(",");
  int j=Integer.parseInt(tuple[0]);
  String[] tuples =tuple[1].split("\t");
  int k=Integer.parseInt(tuples[0]);
  int Njk=Integer.parseInt(tuples[1]);
  for(int i=1;i<rowM+1;i++){
  map_key.set(i+","+k);
  map_value.set("N"+","+j+","+Njk);
  context.write(map_key, map_value);
  }
 }
 
 }

}

reduce函數(shù):對于每個鍵(i,k)相關聯(lián)的值(M,j,m(ij))及(N,j,n(jk)),根據相同的j值將m(ij)和n(jk)分別存入不同的數(shù)組中,然后將倆者的第j個元素抽取出來分別相乘,最后相加,即可得到p(jk)的值。

reducer

package com.cb.matrix;


import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;



public class MatrixReducer extends Reducer<Text, Text, Text, Text> {
 private int sum=0;
 private int columnM;
 @Override
 protected void setup(Reducer<Text, Text, Text, Text>.Context context) throws IOException, InterruptedException {
 // TODO Auto-generated method stub
 Configuration conf =context.getConfiguration();
 columnM=Integer.parseInt(conf.get("columnM"));
 }
 @Override
 protected void reduce(Text arg0, Iterable<Text> arg1, Reducer<Text, Text, Text, Text>.Context arg2)
  throws IOException, InterruptedException {
 // TODO Auto-generated method stub
 int[] M=new int[columnM+1];
 int[] N=new int[columnM+1];
 
 for(Text val:arg1){
  String[] tuple=val.toString().split(",");
  if(tuple[0].equals("M")){
  M[Integer.parseInt(tuple[1])]=Integer.parseInt(tuple[2]);
  
  }else{
  N[Integer.parseInt(tuple[1])]=Integer.parseInt(tuple[2]);
  }
  for(int j=1;j<columnM+1;j++){
  sum+=M[j]*N[j];
  }
  arg2.write(arg0, new Text(Integer.toString(sum)));
  sum=0;
 }
 }

}

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Java并發(fā)之原子性 有序性 可見性及Happen Before原則

    Java并發(fā)之原子性 有序性 可見性及Happen Before原則

    一提到happens-before原則,就讓人有點“丈二和尚摸不著頭腦”。這個涵蓋了整個JMM中可見性原則的規(guī)則,究竟如何理解,把我個人一些理解記錄下來。下面可以和小編一起學習Java 并發(fā)四個原則
    2021-09-09
  • 教你如何使用idea管理docker

    教你如何使用idea管理docker

    其實idea也提供了docker的管理功能,比如查看容器列表,啟動容器,停止容器等,本文來看下如何管理本地的docker?daemon和遠程的dockers?daemon,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • JAVA8?Stream流中的reduce()方法詳解

    JAVA8?Stream流中的reduce()方法詳解

    reduce 操作可以實現(xiàn)從Stream中生成一個值,其生成的值不是隨意的,而是根據指定的計算模型,這篇文章主要介紹了JAVA8?Stream流中的reduce()方法詳解,需要的朋友可以參考下
    2023-02-02
  • springboot+kafka中@KafkaListener動態(tài)指定多個topic問題

    springboot+kafka中@KafkaListener動態(tài)指定多個topic問題

    這篇文章主要介紹了springboot+kafka中@KafkaListener動態(tài)指定多個topic問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 劍指Offer之Java算法習題精講二叉樹專題篇上

    劍指Offer之Java算法習題精講二叉樹專題篇上

    跟著思路走,之后從簡單題入手,反復去看,做過之后可能會忘記,之后再做一次,記不住就反復做,反復尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質的變化
    2022-03-03
  • springboot中如何配置LocalDateTime JSON返回時間戳

    springboot中如何配置LocalDateTime JSON返回時間戳

    這篇文章主要介紹了springboot中如何配置LocalDateTime JSON返回時間戳問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 使用spring?security?BCryptPasswordEncoder接入系統(tǒng)

    使用spring?security?BCryptPasswordEncoder接入系統(tǒng)

    這篇文章主要介紹了使用spring?security?BCryptPasswordEncoder接入系統(tǒng)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java面試必備之ArrayList陷阱解析

    Java面試必備之ArrayList陷阱解析

    昨天小楓接到了一個公司的面試電話,其中一道面試題覺得有點意思,在這里和大家一起分享下。面試題是ArrayList如何刪除指定元素。乍聽很簡單的問題,但是如果沒有實際踩過坑很容易掉進面試官的陷阱中,我們一起來分析下吧
    2022-02-02
  • Java查看和修改線程優(yōu)先級操作詳解

    Java查看和修改線程優(yōu)先級操作詳解

    JAVA中每個線程都有優(yōu)化級屬性,默認情況下,新建的線程和創(chuàng)建該線程的線程優(yōu)先級是一樣的。本文將為大家詳解Java查看和修改線程優(yōu)先級操作的方法,需要的可以參考一下
    2022-08-08
  • springcloud項目快速開始起始模板的實現(xiàn)

    springcloud項目快速開始起始模板的實現(xiàn)

    本文主要介紹了springcloud項目快速開始起始模板思路的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12

最新評論

方城县| 翼城县| 兴山县| 清水县| 泰州市| 中山市| 弋阳县| 镇赉县| 南昌市| 安西县| 昌乐县| 平遥县| 镇安县| 阳谷县| 浮山县| 枣庄市| 连南| 淮滨县| 丰都县| 永清县| 常熟市| 吉木萨尔县| 水城县| 福海县| 邵阳市| 五家渠市| 西乌珠穆沁旗| 阳春市| 琼海市| 翼城县| 屯昌县| 通许县| 罗山县| 贵定县| 丹东市| 凤城市| 永福县| 石棉县| 平和县| 牟定县| 仁化县|