Map
班级学生成绩的随机生成
- 输入:本班同学的学号
- 输出:<学号,成绩>
数据准备
-
首先需要一个
stuID.csv文件
,每一列为一个学号: -
然后将文件放入
HDFS
中:hdfs dfs put stuID.csv input
编写程序
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.utils.ParameterTool;
import java.util.Random;
public class StuScore {
private static Random rand = new Random();
public StuScore(){
}
public static void main(String[] args) throws Exception {
ParameterTool params = ParameterTool.fromArgs(args);
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.getConfig().setGlobalJobParameters(params);
DataSet<String> text;
if(params.has("input")){
text = env.readTextFile(params.get("input"));
}else{
System.out.println("Please confirm input keywords!");
return;
}
DataSet<Tuple2<String,Integer>> stuscore = text.map(new MapFunction<String, Tuple2<String, Integer>>() {
@Override
public Tuple2<String, Integer> map(String s) throws Exception {
return new Tuple2<>(s,rand.nextInt(100) +1);
}
});
//如果没有指定输出,则默认打印到控制台
if(params.has("output")){
stuscore.writeAsCsv(params.get("output"),"\n", ",");
env.execute();
}else{
System.out.println("Printing result to stdout. Use --output to specify output path.");
stuscore.print();
}
}
}
注意点
- Flink提供了一个
ParameterTool
用于简化命令行参数的工具 - 使用匿名函数新建算子是一种很常见的操作
运行
首先确保已经打开了Flink,并在JAR包下执行
flink run -c StuScore StuScore.jar --input /home/hadoop/Documents/distribution/Flink/StuScore/stuID.csv
这里可以用--output
指定输出路径,默认为标准输出
查看结果
reduceByKey
问题
求平均成绩:将全班同学每隔5号分为一组,求每组的平均成绩
输入: <学号,成绩>
输出:<组号,平均分>
数据准备
-
首先需要一个
score.csv文件
,每一列为学号和学生成绩:
编写程序
import org.apache.commons.compress.archivers.dump.DumpArchiveEntry;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.utils.ParameterTool;
public class AVGscore {
private static Integer groupSize = 5;
public static void main(String[] args) throws Exception {
ParameterTool params = ParameterTool.fromArgs(args);
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
env.getConfig().setGlobalJobParameters(params);
DataSet<Tuple2<Integer, Double>> fileDataSet;
if (params.has("input")) {
fileDataSet = env.readCsvFile(params.get("input"))
.types(Integer.class, Double.class);
} else {
System.out.println("Please confirm input keywords!");
return;
}
/**
*