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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Hadoop实例之Java代码实现利用MapReduce求π值

發(fā)布時(shí)間:2025/3/20 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop实例之Java代码实现利用MapReduce求π值 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

需求:假如有一個(gè)邊長為1的正方形。以正方形的一個(gè)端點(diǎn)為圓心,以1為半徑,畫一個(gè)圓弧,于是在正方形內(nèi)就有了一個(gè)直角扇形。在正方形里隨機(jī)生成若干的點(diǎn),則有些點(diǎn)是在扇形內(nèi),有些點(diǎn)是在扇形外。正方形的面積是1,扇形的面積是0.25*Pi。設(shè)點(diǎn)的數(shù)量一共是n,扇形內(nèi)的點(diǎn)數(shù)量是nc,在點(diǎn)足夠多足夠密集的情況下,會(huì)近似有nc/n的比值約等于扇形面積與正方形面積的比值,也就是nc/n= 0.25*Pi/1,即Pi = 4*nc/n

首先是隨機(jī)生成點(diǎn)的問題,利用Halton序列算法隨機(jī)生成的樣本點(diǎn)十分均勻,計(jì)算精度較高,效果比較好。

下面是網(wǎng)上找到的一個(gè)利用Halton序列算法隨機(jī)生成的樣本點(diǎn)的代碼:

?

public class Pi {static int digit = 40;private int[] bases= new int[2];private double[] baseDigit = new double[2];private double[][] background = new double[2][digit];private long index;Pi(int[] base) {bases = base.clone();index = 0;for(int i=0; i<bases.length; i++) {double b = 1.0/bases[i];baseDigit[i] = b;for(int j=0; j<digit; j++) {background[i][j] = j == 0 ? b : background[i][j-1]*b;}}}double[] getNext() {index++;double[] result = {0,0};for(int i=0; i<bases.length; i++) {long num = index;int j = 0;while(num != 0) {result[i] += num % bases[i] * background[i][j++];num /= bases[i];}}return result;}public static void main(String[] args) {int[] base = {2,5};Pi test = new Pi(base);for(int x = 0; x < 100; x++){double[] t = test.getNext();System.out.println(t[0] + "\t" + t[1]);}}}

?

下面是計(jì)算π值的代碼:

package mapreduce;import java.io.IOException;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.DoubleWritable; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import mapreduce.Pi;//下面生成隨機(jī)數(shù)的時(shí)候需要這個(gè)類,該類即上面那部分代碼/*** * @author sakura* 2019.9.3* 利用MapReduce計(jì)算π值**/ public class CalPI {public static class PiMapper extends Mapper<Object, Text, Text, IntWritable>{int number=0; //定義一個(gè)變量,用來存放一共生成的點(diǎn)數(shù)//讀取文件,每一行都是一個(gè)map 本程序讀取的文件為十行,每行都是100000public void map(Object key, Text value, Context context) throws IOException, InterruptedException {int pointNum = Integer.parseInt(value.toString());//將讀取到的那一行賦值給pointNumnumber=number+pointNum;//將總點(diǎn)數(shù)賦值給numberint[] base = {2,5};//生成隨機(jī)點(diǎn)所用Pi test = new Pi(base);//生成隨機(jī)點(diǎn)所用for(int x = 0; x < number; x++){ //循環(huán)生成隨機(jī)點(diǎn)double[] t = test.getNext();//隨機(jī)生成點(diǎn),并將坐標(biāo)存入數(shù)組System.out.println(t[0] + "\t" + t[1]);//控制臺(tái)輸出隨機(jī)點(diǎn)的坐標(biāo)IntWritable result = new IntWritable(0); //定義輸出值if((t[0]*t[0]+t[1]*t[1])<=1)//判斷生成的點(diǎn)是否在扇形面積內(nèi) {result = new IntWritable(1);//如果在,將輸出值賦值為1 }value.set(String.valueOf(number));//定義輸出鍵,輸出鍵為當(dāng)前生成點(diǎn)的總數(shù)context.write(value, result);//寫入 }}}public static class PiReducer extends Reducer<Text,IntWritable,Text,DoubleWritable> {private DoubleWritable result = new DoubleWritable();//聲明輸出值public void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {double pointNum =Double.parseDouble(key.toString());//獲取輸入的鍵double sum = 0;//定義總數(shù)for (IntWritable val : values) {//循環(huán)從values里取值,累加和賦值給sumsum += val.get();}result.set(sum/pointNum*4);//將計(jì)算得到的π值賦值給result context.write(key, result);//將鍵值,即生成點(diǎn)總數(shù),和result,即計(jì)算得到的π值作為一個(gè)鍵值對(duì)寫入context }}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf,"calculate pi");job.setJarByClass(CalPI.class);job.setMapperClass(PiMapper.class);job.setReducerClass(PiReducer.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(DoubleWritable.class);Path in = new Path("hdfs://192.168.68.130:9000/user/hadoop/nai.txt"); //讀入文件地址Path out = new Path("hdfs://192.168.68.130:9000/user/hadoop/output4"); //輸出文件地址,output4不能存在 FileInputFormat.addInputPath(job, in);FileOutputFormat.setOutputPath(job, out);System.exit(job.waitForCompletion(true) ? 0 : 1); }}

?

轉(zhuǎn)載于:https://www.cnblogs.com/sakura--/p/11455467.html

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Hadoop实例之Java代码实现利用MapReduce求π值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 久久亚洲AV成人无码国产野外 | 一区二区三区精品免费视频 | 欧美一卡二卡三卡四卡 | 国产在线观看无码免费视频 | www在线观看国产 | 波多野结衣视频免费观看 | 欧美理论片在线观看 | 久久97视频 | 欧美女人天堂 | 日韩三级黄色 | 欧美人与禽猛交乱配视频 | 99热热热热 | 操视频网站 | 一区二区精品 | 筱田优av| 狠狠人妻久久久久久综合 | 日韩欧美久久 | 欧美另类天堂 | 日韩人成 | 九一国产视频 | a级在线播放 | 亚色在线 | www.色在线 | 久久女女| 欧美日韩高清在线播放 | 亚洲国产免费 | 亚洲免费影院 | 国产色视频网站 | 日韩精品一区二区三区色欲av | 人妻激情偷乱视频一区二区三区 | 国产精品一区二区人妻喷水 | 电影91久久久 | 网站免费视频www | 精品国产99 | 亚洲久草视频 | 久草热在线| 免费成人黄色网址 | 在线观看一区二区三区视频 | 99久久毛片 | 黄色一级视频 | 欧美日韩在线中文字幕 | 免费看91视频 | 色戒未删节版 | 黄色片毛片 | 成人免费看毛片 | 日吊视频 | free性中国hd国语露脸 | 成人综合在线视频 | 人人妻人人澡人人爽人人dvd | 久久久久国产精品一区二区 | 一区=区三区乱码 | 日韩在线视频在线观看 | 欧美特黄一级 | 91av日本| 狠狠91 | 丰满少妇aaaaaa爰片毛片 | 91视频亚洲 | 丁香亚洲 | 亚洲激情欧美色图 | 欧美激情第五页 | 久久青青热 | 欧美特级黄色大片 | 狠狠做深爱婷婷综合一区 | 妖精视频一区二区三区 | 欧美亚洲国产成人 | 无码精品一区二区免费 | 福利在线看 | 日韩电影精品 | 快播色图 | 蜜桃成熟时李丽珍在线观看 | av中亚 | 91精品国产免费 | 日日骚av一区二区 | 日日舔夜夜操 | 婷婷精品在线 | 蜜桃导航-精品导航 | 美女扒开粉嫩的尿囗给男生桶 | 欧美整片第一页 | brazzers猛女系列| 有声小说 成人专区 | 国产精品免费一区二区区 | 成人一区在线观看 | 免费看欧美一级片 | 国产在线一区二区三区 | 午夜爽爽视频 | 四虎国产在线观看 | 日韩在线视频在线观看 | 丰满人妻在公车被猛烈进入电影 | 亚洲 高清 成人 动漫 | h网站在线播放 | 第一章激情艳妇 | 福利在线一区 | 图片区偷拍区小说区 | 久草资源 | 国产精品电影一区二区 | 天天操天天爽天天干 | 成片免费观看视频大全 | 日本大乳美女 | 精品国产99一区二区乱码综合 |