代码之家  ›  专栏  ›  技术社区  ›  user9467051

java:静态变量不能更改值

  •  0
  • user9467051  · 技术社区  · 6 年前

    我试图从javaRDD中获取最小值并将其删除。然后得到下一个值,但我得到了exmin值。例如,在样本中,pt_min的值不变。

    public class Main {
        static Double min= Double.MAX_VALUE;
        static String pt_min="";
    
        static JavaRDD<String> input;
    
    
        public static void main(String[] a){
            Logger.getLogger("org").setLevel(Level.OFF);
            Logger.getLogger("akka").setLevel(Level.OFF);
    
            String inputFile = "/home/k/Desktop/exemple/test";
    
            SparkConf conf = new SparkConf().setAppName("test").setMaster("local");
            JavaSparkContext sc = new JavaSparkContext(conf);
    
            input = sc.textFile(inputFile);
    
            input.foreach(x-> System.out.println(x));
            pt_min=getMin(input);
            System.out.println("********** "+pt_min);
            input= input.filter(x->! x.equals(pt_min));
            input.foreach(x-> System.out.println(x));
            pt_min=getMin(input);
            System.out.println("********** "+pt_min);
        }
    
        private static String getMin(JavaRDD<String> input){
            input.foreach(x->{
                if(min>Double.parseDouble(x)) {
                    min = Double.parseDouble(x);
                    pt_min=x;
                }
            });
        return pt_min;
        }
    }
    

    结果是:

    12
    7
    1
    2
    9
    ********** 1
    12
    7
    2
    9
    ********** 1
    

    请帮我修一下!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Esterlinkof Ishwor    6 年前

    首先,你应该重新初始化min field为Double。最大值

    input.foreach(x-> System.out.println(x));
    pt_min=getMin(input);
    System.out.println("********** "+pt_min);
    input= input.filter(x->! x.equals(pt_min));
    
    // reset min
    min= Double.MAX_VALUE;
    input.foreach(x-> System.out.println(x));
    pt_min=getMin(input);
    System.out.println("********** "+pt_min);
    

    你应该在方法中使用缓存 getMin(input) 因为输入未保存,您应该使用缓存。

    input.cache().foreach(x->{
        if(min>Double.parseDouble(x)) {
            min = Double.parseDouble(x);
            pt_min=x;
        }
    });