[英]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.