先看一个程序:
def main(args: Array[String]): Unit = {
val str = "spark,hadoop,scala,java"
val st = str.split(",")
val map = new HashMap[String,Int]()
var ps = "%"
var sum = 17
for(i <- 0 until st.length){
val count = 13
if(sum.equals(0)){
ps = "00000"
}else if(sum < count){
ps = "sum < count"
}else{
//注意这里的sum为var变量
ps = (count/sum.toFloat)*100 + "%"
}
val stt = "Top"+i+":"+st(i)+" , ps:"+ps+" , count:"+count
//println("第"+i+"个"+" " + stt)
map.put(stt, count)
}
map.foreach(println)
}
运行结果:
(Top1:hadoop , ps:76.47059% , count:13,13)
(Top0:spark , ps:76.47059% , count:13,13)
(Top2:scala , ps:76.47059% , count:13,13)
(Top3:java , ps:76.47059% , count:13,13)
但在实际生产环境中,经常会有一些分布式计算出来的结果(count),这些结果数据会与现有的数据(sum)计算,比如:count/sum.toFloat*100
,这时程序不报错也不会有结果输出,程序中途自动退出。
看程序:定义了一个变量sumCount
循环得到计算结果count
注意这里的percentage=count/sum.toFloat*100 + "%",如果直接写会出错的,
需要把上张图的sumCount的var变成val,如:val sum = sumCount