Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java apachespark:更新workers中的全局变量_Java_Hadoop_Mapreduce_Apache Spark - Fatal编程技术网

Java apachespark:更新workers中的全局变量

Java apachespark:更新workers中的全局变量,java,hadoop,mapreduce,apache-spark,Java,Hadoop,Mapreduce,Apache Spark,我很好奇下面的简单代码是否能在分布式环境中工作(它在独立环境中工作正常) 公共类TestClass{ 专用静态双精度[][]测试阵列=新双精度[4][]; 公共静态void main(字符串[]args){ 对于(inti=0;i否)。它不应该在分布式环境中工作 在闭包中捕获的变量将被序列化并发送给工作程序。最初在驱动程序中设置的数据将对工作程序可用,但工作程序级别的任何更新将仅在本地范围内可访问 在本地,变量位于相同的内存空间中,因此您可以看到更新,但这不会扩展到集群 为了收集结果,您需要将计

我很好奇下面的简单代码是否能在分布式环境中工作(它在独立环境中工作正常)

公共类TestClass{
专用静态双精度[][]测试阵列=新双精度[4][];
公共静态void main(字符串[]args){

对于(inti=0;i否)。它不应该在分布式环境中工作

在闭包中捕获的变量将被序列化并发送给工作程序。最初在驱动程序中设置的数据将对工作程序可用,但工作程序级别的任何更新将仅在本地范围内可访问

在本地,变量位于相同的内存空间中,因此您可以看到更新,但这不会扩展到集群


为了收集结果,您需要将计算转换为RDD操作。

谢谢!请您结合这个简单的示例,对下面的语句进行更详细的说明好吗?>>为了收集结果,您需要将计算转换为RDD操作。选项很少。什么是
/*更新testArray*/
步骤应该做什么?投票结束:这是一个非常有效的问题,对其他人也很有价值。看不出结束的原因。请留下评论和改进建议。
public class TestClass {
    private static double[][] testArray = new double[4][];
    public static void main(String[] args) {
        for(int i = 0; i<4; i++)
        {
            testArray[i] = new double[10];
        }
        ...
        JavaRDD<String> testRDD = sc.textFile("testfile", 4).mapPartitionsWithIndex(
            new Function2<Integer, Iterator<String>, Iterator<String> >() {
                @Override
                public Iterator<String> call(Integer ind, Iterator<String> s) {
                    /*Update testArray[ind]*/
                }
            }, true
        );
    ...