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
);
...