Apache spark 如何计算Spark中RDD的标准偏差?

Apache spark 如何计算Spark中RDD的标准偏差?,apache-spark,distributed-computing,Apache Spark,Distributed Computing,我是Apache Spark的新用户,对sparks运行程序的方式感到困惑 例如,我有一个分布在10个节点上的大型int-RDD,希望在驱动程序上运行scala代码来计算每个分区的(平均/标准偏差)。(重要的是每个分区都有这些值,而不是所有数据) 在Spark有可能吗?有人能给我一个样品吗 执行spark映射操作的示例java代码 listOfLists=newarraylist(); 对于(int j=0;jUtils.oddnumberdd(x))确定。我不想使用Utils函数,而是想自己编

我是Apache Spark的新用户,对sparks运行程序的方式感到困惑

例如,我有一个分布在10个节点上的大型int-RDD,希望在驱动程序上运行scala代码来计算每个分区的(平均/标准偏差)。(重要的是每个分区都有这些值,而不是所有数据)

在Spark有可能吗?有人能给我一个样品吗

执行spark映射操作的示例java代码

listOfLists=newarraylist();
对于(int j=0;j<10;j++){
列表l=新的ArrayList();
对于(int i=0;i<50;i++){
l、 加(i);
}
增加(l);
}
SparkConf conf=new SparkConf().setAppName(“标准应用程序”)//设置其他参数
JavaSparkContext sc=新的JavaSparkContext(conf);
JavaRDD rddNumbers=sc.parallelize(列表);
javarddpartialstd=rddNumbers.map(x->Utils.std(x));
for(整数值:partialSTD.collect()){
系统输出打印项次(值);
}

你可以举一个例子来说明你想要实现的目标吗。考虑到åpache spark可以用于地图缩小作业,这个问题非常模糊。An@SiddarthSreeni如前所述,我想计算分布在10个节点上的一些数据的部分标准偏差。例如,如果我在10个节点中有500个数字,我想计算每个节点上每50个数字的StdDev。换句话说,在运行我的程序后,我应该有10个数字,这是每50个数字的StdDev。我希望我能够正确地表达我的意思。是的,这可以跨10个节点完成。在spark中,更多的是关于执行者运行任务。在本例中,假设您有10个执行器(每个节点1个),您可以使用sc.parallelize()函数创建RDD,以扩展整数[10][50]。确定。但是我不知道应该编写什么代码来将任务分发给执行者。你能给我举个例子吗?@hamidreza上面的代码通过创建一个spark上下文来执行一个简单的映射操作,并打印每个列表整数的std。非常好,谢谢。我可以用Utils.std(x)替换任何函数吗?例如,如果我想计算每个分区的奇数之和,我应该写什么?是的,你可以用你的函数替换Utils.std(x),这个函数必须是“可序列化的”,我忘了提到。如果这解决了您的问题,请标记为答案!如果您想这样做,您必须计算另一个
odddd=rddNumbers.map(x->Utils.oddnumberdd(x))确定。我不想使用Utils函数,而是想自己编写函数。这是我的主要问题。
List<List<Integer>> listOfLists = new ArrayList();

for(int j = 0 ; j < 10; j++){
   List<Integer> l = new ArrayList();
   for(int i = 0 ; i < 50; i++){
      l.add(i);
   }
   listOfLists.add(l);
}

SparkConf conf = new SparkConf().setAppName("STD Application"); //set other params
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<List<Integer>> rddNumbers = sc.parallelize(listOfLists);

JavaRDD<Integer> partialSTD = rddNumbers.map(x -> Utils.std(x)); 

for(Integer value: partialSTD.collect()){
        System.out.println(value);
}