簡體   English   中英

java:靜態變量不能更改值

[英]java : static variable can't change value

我嘗試從javaRDD獲取最小值並將其刪除。然后獲取下一個值,但我獲得了ex最小值。 例如在下面的示例中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

請幫助我修復它!

首先,您應該將min字段重新初始化為Double.MAX_VALUE

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM