java - 如何从 .csv 列中获取最小值和最大值
问题描述
我尝试从 .csv 文件中获取最小值和最大值,但我的代码向我抛出了这个错误:
线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:PSAnalyserGui.Test.main(Test.java:53) 处的索引 1 超出长度 0 的范围
代码:
public class Test {
public static class ColMapper extends
Mapper<Object, Text, Text, DoubleWritable> {
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
String[] cols = value.toString().split(",");
for (int i = 0; i < cols.length; i++) {
context.write(new Text(String.valueOf(i + 1)),new
DoubleWritable(Double.parseDouble(cols[i])));
}
}
}
public static class ColReducer extends
Reducer<Text, DoubleWritable, Text, DoubleWritable> {
public void reduce(Text key, Iterable<DoubleWritable> values,
Context context) throws IOException, InterruptedException {
double min = Integer.MAX_VALUE, max = 0;
Iterator<DoubleWritable> iterator = values.iterator(); //Iterating
while (iterator.hasNext()) {
double value = iterator.next().get();
if (value < min) {
min = value;
}
if (value > max) {
max = value;
}
}
context.write(new Text(key), new DoubleWritable(min));
context.write(new Text(key), new DoubleWritable(max));
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = new Job(conf, "\\ok.csv");
job.setJarByClass(Test.class);
FileSystem fs = FileSystem.get(conf);
if (fs.exists(new Path(args[1]))) {
fs.delete(new Path(args[1]), true);
}
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(DoubleWritable.class);
job.setMapperClass(ColMapper.class);
job.setReducerClass(ColReducer.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
解决方案
ArrayIndexOutOfBoundsException
告诉您您正在尝试访问数组中大于数组维度的元素。
例如,给定
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println("index: " + i + "; value: " + arr[i]);
}
将输出
index: 0; value: 1
index: 1; value: 2
index: 2; value: 3
如果您尝试访问arr[3]
一个ArrayIndexOutOfBoundsException
将被抛出。
查看您的代码中是否出现这些情况(args
在调用main
方法时使用这些情况?)
推荐阅读
- mysql - Mysql 终端实例很好,但 MySQL Workbench 没有连接到数据库
- crc - 在 16 字节短消息上使用 CRC32
- asp.net-mvc - 实现区域时如何使用 VS Core 更改 ASP.NET 核心项目的 MVC 项目文件路径
- flutter - 手势捕获的异常:处理手势时引发以下 NoSuchMethodError:
- javascript - Krispy-forms 添加 javascript 字段总和
- javascript - 使用日期和值更新数组以包含缺失的日期
- python - 如何从 CSV 自动执行新查询并保存到 XLSX
- javascript - 如何在组件渲染前根据 localstorage 操作组件状态
- html - 为什么我的导航项没有出现在窗口顶部?
- swift - tableViewController 中的 SideMenu