18、scala
<pre><code>
import $ivy.`org.apache.spark::spark-sql:2.4.0` // Or use any other 2.x version here
import $ivy.`sh.almond::almond-spark:0.5.0`
import org.apache.log4j.{Level, Logger}
Logger.getLogger("org").setLevel(Level.OFF)
import org.apache.spark.sql._
val spark = {
NotebookSparkSession.builder()
.master("local[*]")
.getOrCreate()
}
import spark.implicits._
//# 使用可变数组
import scala.collection.mutable.ArrayBuffer
class WarPosSee_stage(){
var numArrayBuffer = new ArrayBuffer[String]();
var red_bops_pos = new ArrayBuffer[String]();
var red_bops_see = new ArrayBuffer[String]();
var blue_bops_pos = new ArrayBuffer[String]();
var blue_bops_see = new ArrayBuffer[String]();
// 复原
def reset(){
red_bops_pos = new ArrayBuffer[String]();
red_bops_see = new ArrayBuffer[String]();
blue_bops_pos = new ArrayBuffer[String]();
blue_bops_see = new ArrayBuffer[String]();
}
// #显示位置和观察情况
def show_info(){
println("红方活着棋子位置情况:", red_bops_pos)
println("红方棋子观察敌方情况:", red_bops_see)
println("蓝方活着棋子位置情况:", blue_bops_pos)
println("蓝方棋子观察红方情况:", blue_bops_see)
println("------------------")
}
def count(array:Array[Row]) {
for (i <- 0 to array.length - 1) {
if ((array(i)(2) == "0") && (array(i)(4) == "10") && (array(i)(0) == "0")
|| (array(i)(2) == 0) && (array(i)(4) == 11) && (array(i)(0) == 0)) {
red_bops_pos += "tank_" + array(i)(4) + ": " + (array(i)(6))
// red_bops_live(0) = red_bops_live(0) + 1
} else if ((array(i)(2) == "0") && (array(i)(4) == "20") && (array(i)(0) == "0")
|| (array(i)(2) == "0") && (array(i)(4) == "21") && (array(i)(0) == "0")) {
//red_bops_live(1) = red_bops_live(1) + 1
red_bops_pos += "car_" + array(i)(4) + ": " + (array(i)(6))
} else if ((array(i)(2) == "0") && (array(i)(4) == "30") && (array(i)(0) == "0")
|| (array(i)(2) == "0") && (array(i)(4) == "31") && (array(i)(0) == "0")) {
red_bops_pos += "soldier_" + array(i)(4) + ": " + array(i)(6)
//red_bops_live(2) = red_bops_live(2) + 1
} else if ((array(i)(2) == "1") && (array(i)(4) == "10") && (array(i)(0) == "0")
|| (array(i)(2) == "1") && (array(i)(4) == "11") && (array(i)(0) == "0")) {
blue_bops_pos += "tank_" + array(i)(4) + ": " + array(i)(6)
} else if ((array(i)(2) == "1") && (array(i)(4) == "20") && (array(i)(0) == "0")
|| (array(i)(2) == "1") && (array(i)(4) == "21") && (array(i)(0) == "0")) {
blue_bops_pos += "car_" + array(i)(4) + ": " + array(i)(6)
} else if ((array(i)(2) == "1") && (array(i)(4) == "30") && (array(i)(0) == "0")
|| (array(i)(2) == "1") && (array(i)(4) == "31") && (array(i)(0) == "0")) {
blue_bops_pos += "soldier_" + array(i)(4) + ": " + array(i)(6)
}
}
}
}
//读取数据集,不知道怎么直接读取excel,所以提前把表转换成了csv格式
val df = spark.read.format("csv").option("header", "true").load("../jun_single/csv_posrecord.csv") //读到dataframe df中
//df.show//查看dataframe
var stage = 3
var file_name = "2018530151256 01-05-03-03-02 推演室9"
val df2 = df.filter($"Filename".equalTo(file_name)).filter($"StageID">=stage).filter($"StageID"<=stage+1)
df2.show
var array = df2.collect
class WarCount_stage(){
var red_bops_live = Array(0,0,0)
var red_bops_dead = Array(0,0,0)
var blue_bops_live = Array(0,0,0)
var blue_bops_dead = Array(0,0,0)
var red2blue = 0
def reset(){
red_bops_live = Array(0,0,0)
red_bops_dead = Array(0,0,0)
blue_bops_live = Array(0,0,0)
blue_bops_dead = Array(0,0,0)
red2blue = 0
}
def show_info(){
println("红方活着棋子情况:", "坦克数量:"+ red_bops_live(0) + "战车数量:"+ red_bops_live(1) + "步兵小队数量:"+ red_bops_live(2))
println("红方死亡棋子情况:", "坦克数量:"+ red_bops_dead(0) + "战车数量:"+ red_bops_dead(1) + "步兵小队数量:"+ red_bops_dead(2))
println("蓝方活着棋子情况: ", "坦克数量:"+ blue_bops_live(0) + "战车数量:"+ blue_bops_live(1) + "步兵小队数量:"+ blue_bops_live(2))
println("蓝方死亡棋子情况: ", "坦克数量:"+ blue_bops_dead(0) + "战车数量:"+ blue_bops_dead(1) + "步兵小队数量:"+ blue_bops_dead(2))
println("红蓝双方力量对比: ", red2blue )
println("------------------ ")
}
def count(array:Array[Row]) {
for (i <- 0 to array.length - 1) {
if ((array(i)(2) == "0") && (array(i)(4) == "10") && (array(i)(0) == "0")
|| (array(i)(2) == 0) && (array(i)(4) == 11) && (array(i)(0) == 0)) {
red_bops_live(0) = red_bops_live(0) + 1
} else if ((array(i)(2) == "0") && (array(i)(4) == "20") && (array(i)(0) == "0")
|| (array(i)(2) == "0") && (array(i)(4) == "21") && (array(i)(0) == "0")) {
red_bops_live(1) = red_bops_live(1) + 1
} else if ((array(i)(2) == "0") && (array(i)(4) == "30") && (array(i)(0) == "0")
|| (array(i)(2) == "0") && (array(i)(4) == "31") && (array(i)(0) == "0")) {
red_bops_live(2) = red_bops_live(2) + 1
} else if ((array(i)(2) == "0") && (array(i)(4) == "10") && (array(i)(0) == "1")
|| (array(i)(2) == "0") && (array(i)(4) == "11") && (array(i)(0) == "1")) {
red_bops_dead(0) = red_bops_dead(0) + 1
} else if ((array(i)(2) == "0") && (array(i)(4) == "20") && (array(i)(0) == "1")
|| (array(i)(2) == "0") && (array(i)(4) == "21") && (array(i)(0) == "1")) {
red_bops_dead(1) = red_bops_dead(1) + 1
} else if ((array(i)(2) == "0") && (array(i)(4) == "30") && (array(i)(0) == "1")
|| (array(i)(2) == "0") && (array(i)(4) == "31") && (array(i)(0) == "1")) {
red_bops_dead(2) = red_bops_dead(2) + 1
} else if ((array(i)(2) == "1") && (array(i)(4) == "10") && (array(i)(0) == "0")
|| (array(i)(2) == "1") && (array(i)(4) == "11") && (array(i)(0) == "0")) {
blue_bops_live(0) = blue_bops_live(0) + 1
} else if ((array(i)(2) == "1") && (array(i)(4) == "20") && (array(i)(0) == "0")
|| (array(i)(2) == "1") && (array(i)(4) == "21") && (array(i)(0) == "0")) {
blue_bops_live(1) = blue_bops_live(1) + 1
} else if ((array(i)(2) == "1") && (array(i)(4) == "30") && (array(i)(0) == "0")
|| (array(i)(2) == "1") && (array(i)(4) == "31") && (array(i)(0) == "0")) {
blue_bops_live(2) = blue_bops_live(2) + 1
} else if ((array(i)(2) == "1") && (array(i)(4) == "10") && (array(i)(0) == "1")
|| (array(i)(2) == "1") && (array(i)(4) == "11") && (array(i)(0) == "1")) {
blue_bops_dead(0) = blue_bops_dead(0) + 1
} else if ((array(i)(2) == "1") && (array(i)(4) == "20") && (array(i)(0) == "1")
|| (array(i)(2) == "1") && (array(i)(4) == "21") && (array(i)(0) == "1")) {
blue_bops_dead(1) = blue_bops_dead(1) + 1
} else if ((array(i)(2) == "1") && (array(i)(4) == "30") && (array(i)(0) == "1")
|| (array(i)(2) == "1") && (array(i)(4) == "31") && (array(i)(0) == "1")) {
blue_bops_dead(2) = blue_bops_dead(2) + 1
}
}
//计算力量大小,坦克分值为10,战车分值为8,士兵分值为5,求总的分值
var red_power:Int = red_bops_live(0) * 10 + red_bops_live(1)*8 + red_bops_live(2)*5
var blue_power:Int = blue_bops_live(0) * 10 + blue_bops_live(1)*8 + blue_bops_live(2)*5
// println(red_power)
// println(blue_power)
println( "红:蓝 = " + red_power + " : " + blue_power)
//如果有一方棋子全部阵亡时
if (blue_power == 0){
print("蓝方全部棋子阵亡")
red2blue = 100
}else if(red_power == 0){
print("红方全部棋子阵亡")
red2blue = -100
}else{
print("eee")
red2blue = red_power/blue_power
}
}
}
var stage = 5
var file_name = "2018530151256 01-05-03-03-02 推演室9"
val df2 = df.filter($"Filename".equalTo(file_name)).filter($"StageID">=stage).filter($"StageID"<=stage+1)
df2.show
var array = df2.collect
var mWarPosSee_stage = new WarPosSee_stage()
mWarPosSee_stage.count(array)
mWarPosSee_stage.show_info()
var mWarCount_stage = new WarCount_stage()
mWarCount_stage.count(array)
mWarCount_stage.show_info()
</code></pre>