project的使用

上篇:connect的使用

 project [DataStream → DataStream]

project 主要用于获取 tuples 中的指定字段集

    public static void project(StreamExecutionEnvironment env) {
        DataStreamSource<Tuple3<String, Integer, String>> streamSource = env.fromElements(
                new Tuple3<>("li", 22, "2018-09-23"),
                new Tuple3<>("ming", 33, "2020-09-23"));
        streamSource.project(0, 2).print();
    }

运行结果:

 (ming,2020-09-23)
 (li,2018-09-23)

来一个实例,直接上代码:

package cn._51doit.flink.day03;

import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.api.java.tuple.Tuple3;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
/**
 * project的使用
 * 有界流
 *
 * 直接运行,控制台打印输出:
 * 2> (99.99,laoduan)
 * 1> (9999.99,laozhao)
 */
public class ProjectDemo {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());

        DataStreamSource<String> lines = env.fromElements("laozhao,18,9999.99","laoduan,28,99.99");
        SingleOutputStreamOperator<Tuple3<String, Integer, Double>> tpDataStream = lines.map(e -> {
            String[] fields = e.split(",");
            return Tuple3.of(fields[0], Integer.parseInt(fields[1]), Double.parseDouble(fields[2]));
        }).returns(Types.TUPLE(Types.STRING,Types.INT,Types.DOUBLE));

        SingleOutputStreamOperator<Tuple> projected = tpDataStream.project(2, 0);

        projected.print();

        env.execute();


    }
}

代码改造后:

package cn._51doit.flink.day03;

import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.common.typeinfo.Types;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.tuple.Tuple3;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;

/**
 * project的使用:有界流
 *
 * 直接运行,控制台打印输出[代码改造之前]
 * 4> (99.99,laoduan)
 * 3> (9999.99,laozhao)
 *
 * 直接运行,控制台打印输出[代码改造之后]
 * 3> (9999.99,laozhao)
 * 4> (99.99,laoduan)
 */
public class ProjectDemo_01 {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());

        DataStreamSource<String> lines = env.fromElements("laozhao,18,9999.99","laoduan,28,99.99");
        SingleOutputStreamOperator<Tuple3<String, Integer, Double>> tpDataStream = lines.map(e -> {
            String[] fields = e.split(",");
            return Tuple3.of(fields[0], Integer.parseInt(fields[1]), Double.parseDouble(fields[2]));
        }).returns(Types.TUPLE(Types.STRING,Types.INT,Types.DOUBLE));

        SingleOutputStreamOperator<Tuple2<Double, String>> projected = tpDataStream.map(new MapFunction<Tuple3<String, Integer, Double>, Tuple2<Double, String>>() {

            @Override
            public Tuple2<Double, String> map(Tuple3<String, Integer, Double> value) throws Exception {
                return Tuple2.of(value.f2, value.f0);
            }
        });

        projected.print();

        env.execute();

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值