Flink编程练习(二)

Map

班级学生成绩的随机生成

  • 输入:本班同学的学号
  • 输出:<学号,成绩>

数据准备

  1. 首先需要一个stuID.csv文件,每一列为一个学号:

    • 53991837251
  2. 然后将文件放入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();
        }

    }
}

注意点

  1. Flink提供了一个ParameterTool用于简化命令行参数的工具
  2. 使用匿名函数新建算子是一种很常见的操作

运行

首先确保已经打开了Flink,并在JAR包下执行

flink run -c StuScore StuScore.jar --input /home/hadoop/Documents/distribution/Flink/StuScore/stuID.csv

这里可以用--output指定输出路径,默认为标准输出

查看结果

54469946644

reduceByKey

问题

求平均成绩:将全班同学每隔5号分为一组,求每组的平均成绩

输入: <学号,成绩>

输出:<组号,平均分>

数据准备

  1. 首先需要一个score.csv文件,每一列为学号和学生成绩:

    • 53991837251

编写程序

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;
        }

        /**
         * 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值