flink之算子 min 和minBy 有什么区别??

网上找的答案和官方文档表述的都不太易懂...
 * Author: hjm
 * Date: 2019/01/10 15 09
 * Description:
 * 直接上结论吧:
 * 假设当一个filed有多个字段时 province city money
 * min 将会把最小的记录的分组字段(这里是province)& 比较字段(money)进行返回
 * 而其他字段(city)将保留第一次出现的值
 * 命令行输入:nc -lk 8888
 * 例如输入以下数据:
 * --------------------------
 * province,city,money
 * 辽宁,沈阳,1000
 * 辽宁,大连,800
 * 辽宁,锦州,800
 * --------------------------
 * 将得到:(这里money的index是2,对money进行比较)
 * ==>min(2) ==> 辽宁 沈阳 800
 * ==>minby(2)==>辽宁 锦州 800

以下是代码:

public class MinByDemo {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStreamSource<String> lines = env.socketTextStream("localhost", 8888);

        SingleOutputStreamOperator<Tuple3<String, String, Double>> mapped = lines.map(new MapFunction<String, Tuple3<String, String, Double>>() {

            @Override
            public Tuple3<String, String, Double> map(String value) throws Exception {
                String[] flieds = value.split(",");
                String province = flieds[0];
                String city = flieds[1];
                Double money = Double.parseDouble(flieds[2]);
                return Tuple3.of(province, city, money);
            }
        });
        KeyedStream<Tuple3<String, String, Double>, String> keyByed = mapped.keyBy(t -> t.f0);
        SingleOutputStreamOperator<Tuple3<String, String, Double>> minbyed = keyByed.minBy(2, false);
         /* minBy(比较字段,false) 将会把最小的记录的那条 flieds进行返回
                * 而其他字段(city)将保留第一次出现的字段
                * 辽宁,沈阳,1000
                * 辽宁,大连,800
                * 辽宁,锦州,800
                * ==>minby(2,false) ==> 辽宁 锦州 800
                * 第二个布尔值类型的参数意思是 假设同一个分组有几条(money)都等于800的 而
                * 且是最小的 那么要返回新的那条最小的数据的flieds;
                */
        minbyed.print();
        env.execute("MinByDemo");
    }
}

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值