public class AvgScore extends Configured implements Tool{ @Override public int run(String[] args) throws Exception { if(args.length!=3){ System.err.println("demo.AvgScore <input> <output> <splitter>"); System.exit(-1); } Configuration conf=getMyConfiguration(); conf.set("SPLITTER", args[2]); Job job=Job.getInstance(conf, "avgScore"); job.setJarByClass(AvgScore.class); job.setMapperClass(AvgScoreMapper.class); job.setReducerClass(AvgScoreReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(DoubleWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileSystem.get(conf).delete(new Path(args[1]), true); FileOutputFormat.setOutputPath(job, new Path(args[1])); return job.waitForCompletion(true)?-1:1; } public static void main(String[] args) { String[] myArgs={ "/user/root/score", "/user/root/avgscore", "," }; try { ToolRunner.run(getMyConfiguration(), new AvgScore(), myArgs); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static Configuration getMyConfiguration(){ //声明配置 Configuration conf = new Configuration(); conf.setBoolean("mapreduce.app-submission.cross-platform",true); conf.set("fs.defaultFS", "hdfs://master:8020");// 指定namenode conf.set("mapreduce.framework.name","yarn"); // 指定使用yarn框架 String resourcenode="master"; conf.set("yarn.resourcemanager.address", resourcenode+":8032"); // 指定resourcemanager conf.set("yarn.resourcemanager.scheduler.address",resourcenode+":8030");// 指定资源分配器 conf.set("mapreduce.jobhistory.address",resourcenode+":10020"); conf.set("mapreduce.job.jar",JarUtil.jar(AvgScore.class)); return conf; } }对这段代码进行解释
时间: 2024-04-02 12:33:58 浏览: 136
这段代码是一个使用 Hadoop MapReduce 实现的计算平均分数的程序。它包括一个继承了 Configured 类和实现了 Tool 接口的 AvgScore 类,其中实现了 run() 方法和 main() 方法。
在 run() 方法中,首先检查输入参数的个数是否正确,然后获取配置对象并设置分隔符。接着创建一个 Job 对象并设置 Mapper 和 Reducer 类,以及输出键值对类型。然后指定输入和输出路径,并提交作业并等待其完成。
在 main() 方法中,设置了输入和输出路径以及分隔符,并通过 ToolRunner.run() 方法运行作业。
最后,getMyConfiguration() 方法返回一个配置对象,其中设置了 Hadoop 和 YARN 的相关属性,并指定了作业的 jar 包。
相关问题
package indi.wrenn.studentsystem.bean; //分析结果类 public class AnalyzeResult { private String studentId; //学生学号 private String studentName; //学生姓名 private String sumScore; //学生总成绩 private String avgScore; //学生平均成绩 public String getStudentId() { return studentId; } public void setStudentId(String studentId) { this.studentId = studentId; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public String getSumScore() { return sumScore; } public void setSumScore(String sumScore) { this.sumScore = sumScore; } public String getAvgScore() { return avgScore; } public void setAvgScore(String avgScore) { this.avgScore = avgScore; } }是封装数据模型对象吗?不是的话请分析代码
是的,这是一个封装数据模型对象,用于存储学生的成绩分析结果。该类有四个属性:学生学号、学生姓名、总成绩和平均成绩,以及对应的getter和setter方法。这些属性和方法用于封装和访问学生的成绩分析结果。在使用该类时,可以通过调用对应的setter方法设置属性的值,也可以通过调用对应的getter方法获取属性的值。该类的作用是封装数据,方便数据的传递和处理。
import java.util.Scanner; public class EX1 { public static void main(String[] args) { int[] scores = new int[6]; Scanner scanner = new Scanner(System.in);for (int i = 0; i < scores.length; i++) { System.out.print("请输入第" + (i+1) + "个评委的分数:"); scores[i] = scanner.nextInt(); } // 3.由于6个评委打分,所以,接收评委分数的操作,用循环改进。 // 4.定义方法实验获取数组中的最高分(数组最大值)调用方法。 int maxScore = getMaxScore(scores); // 5.定义方法实验获取数组中的最低分(数组最小值)调用方法。 int minScore = getMinScore(scores); // 6.定义方法实验获取数组中的所有元素的和(数组元素求和),调用方法。 int sumScore = getSumScore(scores); // 7.按照计算规则进行计算得到平均分。 int avgScore = (sumScore - maxScore - minScore) / 4; System.out.println("选手的最终得分为:" + avgScore); }不能解决符号Scanner
对不起,我之前的回答中确实忘记了在开头 import Scanner。你需要在代码开头加上这一句:`import java.util.Scanner;`,这样就可以使用 Scanner 类了。
完整代码如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[] scores = new int[6];
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < scores.length; i++) {
System.out.print("请输入第" + (i+1) + "个评委的分数:");
scores[i] = scanner.nextInt();
}
int maxScore = getMaxScore(scores);
int minScore = getMinScore(scores);
int sumScore = getSumScore(scores);
int avgScore = (sumScore - maxScore - minScore) / 4;
System.out.println("选手的最终得分为:" + avgScore);
}
// 获取数组中的最高分
public static int getMaxScore(int[] scores) {
int max = scores[0];
for (int i = 1; i < scores.length; i++) {
if (scores[i] > max) {
max = scores[i];
}
}
return max;
}
// 获取数组中的最低分
public static int getMinScore(int[] scores) {
int min = scores[0];
for (int i = 1; i < scores.length; i++) {
if (scores[i] < min) {
min = scores[i];
}
}
return min;
}
// 获取数组中所有元素的和
public static int getSumScore(int[] scores) {
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
return sum;
}
}
```
希望这次能够解决你的问题。
阅读全文