diff --git a/system/start/pom.xml b/system/start/pom.xml index 590cf8a..af51f9e 100644 --- a/system/start/pom.xml +++ b/system/start/pom.xml @@ -22,6 +22,11 @@ spark-sql_2.13 3.2.0 + + org.apache.spark + spark-mllib_2.13 + 3.2.0 + diff --git a/system/start/src/main/java/org/jeecg/sy/Controller.java b/system/start/src/main/java/org/jeecg/sy/java/Controller.java similarity index 75% rename from system/start/src/main/java/org/jeecg/sy/Controller.java rename to system/start/src/main/java/org/jeecg/sy/java/Controller.java index 722d79c..39eb0a0 100644 --- a/system/start/src/main/java/org/jeecg/sy/Controller.java +++ b/system/start/src/main/java/org/jeecg/sy/java/Controller.java @@ -1,12 +1,12 @@ -package org.jeecg.sy; +package org.jeecg.sy.java; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Row; import org.jeecg.common.api.vo.Result; +import org.jeecg.sy.scala.WeatherPrediction$; +import org.jeecg.sy.temp.analysis$; +import org.jetbrains.annotations.NotNull; import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -16,9 +16,6 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; -import static org.jeecg.sy.getData.getDatas; -import static org.jeecg.sy.getData.getDatas2; - @RestController @RequestMapping("/sy") public class Controller { @@ -29,16 +26,7 @@ public class Controller { @RequestMapping("/get") public Result test1() throws MalformedURLException { - List list = getDatas(""); - // 将list 倒序 - for (int i = 0; i < list.size() / 2; i++) { - weather_1 temp = list.get(i); - list.set(i, list.get(list.size() - i - 1)); - list.set(list.size() - i - 1, temp); - } - - String df = Test$.MODULE$.getString(); - return Result.ok(list); + return Result.ok(analysis$.MODULE$.analysis2(getData.getDatas(""))); } //分析数据 @@ -49,35 +37,7 @@ public class Controller { if (redisTemplate.hasKey(key)) { return Result.ok(redisTemplate.opsForValue().get(key)); } - // 获取一年的数据 - String time[] = new String[12]; - time[0] = "202304"; - time[1] = "202305"; - time[2] = "202306"; - time[3] = "202307"; - time[4] = "202308"; - time[5] = "202309"; - time[6] = "202310"; - time[7] = "202311"; - time[8] = "202312"; - time[9] = "202401"; - time[10] = "202402"; - time[11] = "202403"; - List list = new ArrayList<>(); - for (int i = 11; i >= 0; i--) { - list.addAll(getDatas(time[i])); - } - // 先将list按照时间排序,旧的在前面,新的在后面 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - Collections.sort(list, new Comparator() { - public int compare(weather_1 d1, weather_1 d2) { - try { - return sdf.parse(d1.getData()).compareTo(sdf.parse(d2.getData())); - } catch (ParseException e) { - throw new IllegalArgumentException(e); - } - } - }); + List list = analysis$.MODULE$.analysis2(getWeathers()); // 三个结果 JSONObject result = new JSONObject(); result.put("temperature", getTemperature(list)); @@ -92,13 +52,26 @@ public class Controller { // 预测未来一周的天气情况和最高温度 @RequestMapping("/fe") public Result test3() throws MalformedURLException { - List list = getDatas2(); + List list = analysis$.MODULE$.analysis3(getData.getDatas2()); // 三个结果 JSONObject result = new JSONObject(); result.put("data", list); return Result.ok(result); } + @NotNull + private static List getWeathers() throws MalformedURLException { + // 获取一年的数据 + String times = "202204,202205,202206,202207,202208,202209,202210,202211,202212,202301,202302,202303,202304,202305,202306,202307,202308,202309,202310,202311,202312,202401,202402,202403,"; + List list = new ArrayList<>(); + String time[] = times.split(","); + for (int i = time.length - 1; i >= 0; i--) { + list.addAll(getData.getDatas(time[i])); + } + return list; + } + + // 获取列表中的 最高气温和最低气温的变化曲线(两条线) public static JSONObject getTemperature(List list) { JSONObject result = new JSONObject(); diff --git a/system/start/src/main/java/org/jeecg/sy/scala/WeatherPrediction.scala b/system/start/src/main/java/org/jeecg/sy/scala/WeatherPrediction.scala new file mode 100644 index 0000000..7907083 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/sy/scala/WeatherPrediction.scala @@ -0,0 +1,57 @@ +package org.jeecg.sy.scala + +import org.apache.spark.sql.SparkSession +import org.apache.spark.sql.functions._ +import org.apache.spark.ml.feature.VectorAssembler +import org.apache.spark.ml.regression.LinearRegression +import org.apache.spark.ml.Pipeline +import org.apache.spark.sql.Encoders +import org.jeecg.sy.java.weather_1 + +import java.util + +object WeatherPrediction { + + def forecast(): Unit = { + val list = new util.ArrayList[Weather1]() + val spark = SparkSession.builder() + .appName("Weather Temperature Prediction") + .master("local[*]") // 适用于本地开发和测试 + .getOrCreate() + + import spark.implicits._ + + // 将List转换为DataFrame + val weatherData = null + + // 定义特征向量 + val assembler = new VectorAssembler() + .setInputCols(Array("lowTemperature", "windSpeed")) // 根据你的数据选择合适的特征 + .setOutputCol("features") + + // 创建线性回归模型 + val lr = new LinearRegression() + .setLabelCol("highTemperature") + .setFeaturesCol("features") + .setMaxIter(10) + .setRegParam(0.3) + .setElasticNetParam(0.8) + + // 创建Pipeline + val pipeline = new Pipeline() + .setStages(Array(assembler, lr)) + + // 训练模型 + val model = pipeline.fit(weatherData) + + // 使用模型进行预测 + val predictions = model.transform(weatherData) + + // 显示预测结果 + predictions.select("data", "highTemperature", "features", "prediction").show() + + // 停止SparkSession + spark.stop() + } +} + diff --git a/system/start/src/main/java/org/jeecg/sy/temp/analysis.scala b/system/start/src/main/java/org/jeecg/sy/temp/analysis.scala new file mode 100644 index 0000000..01324b4 --- /dev/null +++ b/system/start/src/main/java/org/jeecg/sy/temp/analysis.scala @@ -0,0 +1,42 @@ +package org.jeecg.sy.temp + +import com.alibaba.fastjson.{JSONArray, JSONObject} +import org.jeecg.sy.java.{weather_1, weather_2} + +import java.text.{ParseException, SimpleDateFormat} +import java.util +import java.util.{Collections, Comparator, List} + +object analysis { + // 数据爬取,输入一个List[weather_1],返回处理完的数据 + def getData(list: List[weather_1]): List[weather_1] = { + // 将list 倒序// 将list 倒序 + for (i <- 0 until list.size / 2) { + val temp: weather_1 = list.get(i) + list.set(i, list.get(list.size - i - 1)) + list.set(list.size - i - 1, temp) + } + return list + } + + def analysis2(list: List[weather_1]): List[weather_1] = { + // 先将list按照时间排序,旧的在前面,新的在后面 + // 先将list按照时间排序,旧的在前面,新的在后面 + val sdf: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd") + Collections.sort(list, new Comparator[weather_1]() { + override def compare(d1: weather_1, d2: weather_1): Int = { + try return sdf.parse(d1.getData).compareTo(sdf.parse(d2.getData)) + catch { + case e: ParseException => + throw new IllegalArgumentException(e) + } + } + }) + list + } + + def analysis3(list: List[weather_2]): List[weather_2] = { + list + } + +} diff --git a/system/start/src/main/resources/application-dev.yml b/system/start/src/main/resources/application-dev.yml index 7674e10..1d8e222 100644 --- a/system/start/src/main/resources/application-dev.yml +++ b/system/start/src/main/resources/application-dev.yml @@ -170,7 +170,7 @@ spring: #driver-class-name: com.mysql.cj.jdbc.Driver #redis 配置 redis: - database: 3 + database: 13 host: 82.157.76.162 port: 6379 password: aB3cDeF9 @@ -239,7 +239,7 @@ jeecg: #大屏报表参数设置 jmreport: #多租户模式,默认值为空(created:按照创建人隔离、tenant:按照租户隔离) (v1.6.2+ 新增) - saasMode: + saasMode: # 平台上线安全配置(v1.6.2+ 新增) firewall: # 数据源安全 (开启后,不允许使用平台数据源、SQL解析加签并且不允许查询数据库)