当今社会,新能源汽车已经成为了人们关注的热点话题之一。而对于新能源汽车的研究和开发,数据的重要性不言而喻。因此,模拟生成新能源车辆数据成为了一个非常有意义的工作。
题目:
编写一个程序,每天凌晨3点模拟生成当天的新能源车辆数据(字段信息必须包含:车架号、行驶总里程、车速、车辆状态、充电状态、剩余电量SOC、SOC低报警、数据生成时间等)。
要求:
1、最终部署时,要将这些数据写到第一题的HDFS中。(如果有多个组做第一题,则任选一个HDFS即可);
2、车辆数据要按天存储,数据格式是JSON格式,另外如果数据文件大于100M,则另起一个文件存。每天的数据总量不少于300M。比如假设程序是2023-01-1 03点运行,那么就将当前模拟生成的数据写入到HDFS的/can_data/2023-01-01文件夹的can-2023-01-01.json文件中,写满100M,则继续写到can-2023-01-01.json.2文件中,依次类推;
3、每天模拟生成的车辆数据中,必须至少包含20辆车的数据,即要含有20个车架号(一个车架号表示一辆车,用字符串表示);
4、每天生成的数据中要有少量(20条左右)重复数据(所有字段都相同的两条数据则认为是重复数据),且同一辆车的两条数据的数据生成时间间隔两秒;
5、每天生成的数据中要混有少量前几天的数据(即数据生成时间不是当天,而是前几天的)。
注:本文仅供参考
通过分析题目,我们可以知道以下几点
安装Jave和引入包的类或接口
例如idea等。这些库可以帮助我们更方便地处理数据。
生成车辆基本信息
我们可以使用Jave定义新能源车辆的基本信息,基本信息就是指题干中的车架号、行驶总里程、车速、车辆状态、充电状态、剩余电量SOC、SOC低报警、数据生成时间等这些字段信息。
生成车辆行驶数据
我们可以使用Jave的随机数生成器来模拟车辆的行驶数据
保存数据
我们可以将生成的数据保存到文件中,以便后续使用。
最后,将数据部署到HDFS中。
注:此程序需小组完成,我所负责的部分是定义基本信息中行驶总里程、车速、充电状态,这三个的类。所以本文仅供参考,希望有小部分的帮助。
首先,我们需要安装安装可以运行jave文件的软件,比如IEDEA。
接下来是安装IDEA的步骤
第一步:搜索IDEA官网,并且选择版本,自行下载安装包,下载链接如下(可以参考参考):
IDEA官网下载
点击下载,静心等待即可。
第二步:可以通过网上搜索看教程安装(因为我已经安装好了,所以省略了)
可以参照此文章安装:IDEA安装教程
注:如果本机已经安装好了Jave,那么这一步可以省略。
基本信息:车架号、行驶总里程、车速、车辆状态、充电状态、剩余电量SOC、SOC低报警、数据生成时间;
在创建类的过程中,首先要引入其他包中的类或接口,例如java.util.ArrayList、java.util.List、java.util.Random等,这样我们才能在代码中使用。
同时,我们还可以根据需要设置一些限制条件,例如车型必须是新能源车辆、车架号必须符合规定等。
我们通过调用Jave的随机数生成器来模拟车辆的行驶数据,可以每天凌晨3点模拟生成当天的新能源车辆数据。同时,我们还可以根据需要设置一些限制条件,例如速度不能超过限速、里程不能超过电池续航里程等。
我所负责的部分代码:
Mileage类和Speed类都引入import java.util.ArrayList;import java.util.List;import java.util.Random;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
只有ChargeStatus类引入了import java.util.ArrayList;import java.util.List;
import java.util.ArrayList;
import java.util.List;
行驶总里程:
定义类名为Mileage,它包含一个静态方法RandomMileage(),该方法使用Random类生成一个随机数,表示里程数。这个方法返回一个Integer类型的随机里程数,范围在0到2400之间。这段代码的作用是生成一个随机的里程数。
public class Mileage {
public static Integer RandomMileage(){
Random random = new Random();
return random.nextInt(2400);
}
}
下面这段代码是一个Java方法,名为getMieageList。它接受一个整数参数num,并返回一个整数列表。在方法内部,使用一个for循环来生成num个随机的里程数,并将它们添加到vinList列表中。这个方法依赖于RandomMileage()方法来生成随机的里程数。
public static List<Integer> getMieageList(int num){
List<Integer> vinList = new ArrayList<>();
for(int i =0;i<num;i++){
vinList.add(RandomMileage());
}
return vinList;
}
车速
定义类名为Speed。它包含一个静态方法RandomSpeed(),该方法使用Random类生成一个随机数,表示车速。这个方法返回一个Integer类型的随机车速,范围在0到300之间。这段代码的作用是生成一个随机的车速。
public class Speed {
public static Integer RandomSpeed(){
Random random = new Random();
return random.nextInt(300);//随机生成0~300的车速
}
}
下面这段代码是一个Java方法,名为getMieageList。它接受一个整数参数num,并返回一个整数列表。在方法内部,使用一个for循环来生成num个随机的里程数,并将它们添加到vinList列表中。这个方法依赖于RandomMileage()方法来生成随机的里程数。
public static List<Integer> getMieageList(int num){
List<Integer> vinList = new ArrayList<>();
for(int i =0;i<num;i++){
vinList.add(RandomSpeed());
}
return vinList;
}
充电状态
定义类名为ChargeStatus。它包含一个静态方法getChargeStatus(),该方法接受一个整数列表mileageList作为参数,并返回一个字符串列表statusList。在方法内部,使用一个for循环遍历mileageList中的每个里程数,并根据里程数的不同情况,将相应的充电状态添加到statusList中。这段代码的作用是根据里程数列表生成对应的充电状态列表。
public class ChargeStatus {
public static List<String> getChargeStatus(List<Integer> mileageList){
List<String> statusList = new ArrayList<>();
for (int i =0;i<mileageList.size();i++){
if (mileageList.get(i)==0){
statusList.add("充电中");
}else{
statusList.add("未充电");
}
}
return statusList;
}
}
我们可以将生成的数据保存JSON格式的文件中,以便后续使用。
最后,我们将以上保存好的数据部署到HDFS。
说明:可以使用Hadoop的FileSystem类。
首先,需要使用Hadoop的Configuration类来配置HDFS连接。然后,使用FileSystem的get()方法获取HDFS的客户端实例,并使用copyFromLocalFile()方法将本地文件复制到HDFS。
下面是一个示例代码(仅供参考):
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HdfsUploader {
public static void main(String[] args) {
try {
// 配置HDFS连接
Configuration conf = new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
// 获取HDFS客户端实例
FileSystem fs = FileSystem.get(conf);
// 本地文件路径
String localFilePath = "/path/to/local/file.txt";
// HDFS文件路径
String hdfsFilePath = "/path/to/hdfs/file.txt";
// 将本地文件复制到HDFS
fs.copyFromLocalFile(new Path(localFilePath), new Path(hdfsFilePath));
System.out.println("文件上传成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
请注意,上述示例中的localhost:9000是HDFS的默认地址,你需要根据实际情况修改为你的HDFS地址。另外,需要确保本地文件和HDFS文件的路径是正确的。
最后,我觉得模拟生成新能源车辆数据是一个非常有意义的工作,可以帮助我们更好地了解新能源汽车的性能和特点。同时,也可以为新能源汽车的研究和开发提供一些有用的数据支持。