梁超实用例子之π值计算

梁π值计算





梁超实用例子之π值计算“> <p类=?6”wx-bdc>梁刚刚开源不是很久,快2个月了。目前的版本是0.5.0版本。官方的源码中提供了4个例子。无奈这四个案例都只是WordCount的四种不同的实现。作为一个从火花进入大数据殿堂的笔者来说,用多过n次的SparkPi的我,怎么能忍受竟然没有π实现的例子呢。假如有了这个案例,可以非常方便的无论在开发工具中还是在集群中进行测试。于是便有了下文。笔者的文笔和技术有限。不足之处,还望朋友多多提建议我们一起来alt=

梁超实用例子之π值计算

梁超实用例子之π值计算

梁超实用例子之π值计算

梁超实用例子之π值计算


可以复制代码

包org.tongfang.beam.examples;


进口java.util.ArrayList;

进口并不知道;



进口org.apache.beam.runners.spark.SparkRunner;进口org.apache.beam.sdk.Pipeline;

进口org.apache.beam.sdk.options.PipelineOptions;进口org.apache.beam.sdk.options.PipelineOptionsFactory;

进口org.apache.beam.sdk.transforms。*;


公共类BeamPi {


公共静态void main (String [] args) {

//梁π的自定义实现方式

//第一步骤:创建选项,

//通过该对象可以选择使用哪个计算框架来计算,并且设置应用的名称

=PipelineOptionsFactory.create PipelineOptions选项();

//设置工作(应用)名称

选项。setJobName(“梁π”);

//设置运动员为火花

options.setRunner (SparkRunner.class);

//创建管道p

管道p=Pipeline.create(选项);

//100000000次的随机试验的次数,如果资源,

//足够的大可以进行更多次的试验,用大数据的理论来说,

//理论上可以进行无数次的试验(只要不断的横向扩展计算的资源).

List列表=new ArrayList ();

(int i=0; i<1000000;我+ +){

list.add (i);

}


//相当于火花从内存中读取数据,并通过地图迭代访问每一个元素,

//这里迭代1000000的访问每个依次增大的数字,

//没迭代一次,做一次试验,当点落到圆内,计数增加1,否则不计数

//也就是什么也不做

//然后再近些计数计数,最后计数结果除以试验次数,就是概率。

//从数学角度来看,π的值就是4倍这个概率。从而计算出π的值。

p.apply (Create.of(列表))苹果(帕尔多。(新DoFn<整数,Integer> () {

双x=0;

双y=0;

私有静态最终长serialVersionUID=1 l;

, @ProcessElement

,,,,,公共空间processElement (ProcessContext c) {

,,,,,,x=math . random () * 2 - 1;;

y=math . random () * 2 - 1;;

如果((x * x + y * y) & lt; 1) {

c.output (1),

}其他{

}

,,,,,,

,}

}))。应用(计数。你们;Integer>全球())。

(MapElements申请。通过(新SimpleFunction<长,Void> () {


/* *

, *,

, */

私有静态最终长serialVersionUID=1 l;


公共无效申请(长输入){

浮动res=(浮动)(4.0 *(浮动)输入/1000000 f);

System.out.println(输入),

system . out。println(π:+ res);


返回null;

}

}));

//这是运行计算的关键,如果这个代码不写,

//整个代码都是懒加载,并非真正计算。

p.run () .waitUntilFinish ();

}


}



梁超实用例子之π值计算