Flink初次练习(Transformation)

本文详细介绍了使用Flink进行Transformation的多个练习,包括数字乘10、字符串转int、累计求和、转换Tuple、过滤、去重、join操作以及外连接。通过IntelliJ IDEA进行实践,特别强调了在不同步骤中需要注意的细节和快捷键的使用。
摘要由CSDN通过智能技术生成

Flink的官网:https://flink.apache.org/
使用的软件:IntelliJ IDEA Community Edition
CoreAPI:

  • DataSet:专门处理离线数据,给离线数据处理设计了更多有针对性的API. env:ExecutionEnvironment
  • DataStream:一般用于处理流式数据,也可以处理离线数据env:StreamExecutionEnvironment

创建TransformationTest文件

练习一

将输入的数字均乘10

package cn.tedu.dataset;

import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;

public class TransformationTest {
   
    public static void main(String[] args) throws Exception {
   
        //1.获取执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        //2.获取数据源
        DataSource<Integer> source = env.fromElements(1, 2, 3, 4, 5);
        //3.转化数据
        //map:进一出一
        source.map(new MapFunction<Integer, Integer>() {
   
            @Override
            public Integer map(Integer value) throws Exception {
   
                return value * 10;
            }
        })
        //4.输出结果
        .print();
        //5.触发程序执行
    }
}

需要注意的点:

  • 与之前那篇博客一样,很多代码不需要手敲,使用快捷键非常方便
  • 着重要注意的是第三步,敲完"source.map(new M"后直接回车,能跳出"source.map(new MapFunction<Integer, Object>",括号中的"Integer"分别代表输入和输出值的类型,第一个之所以是Int是因为第二步中"source"就已经定义了是int,但是输出它不知道你需要什么,所以是"object"(注意第一个Integer有个蓝框)我们需要输入和输出都是int,所以先回车,将蓝框跳到"Object",输入"Integer",之后直接回车,下面的两行会直接跳出来,不需要手打(跳出下面两行不止一种方法,这一种感觉比较方便)
练习二

将字符串转化成 int 输出

package cn.tedu.dataset;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.util.Collector;

public class TransformationTest {
   
    public static void main(String[] args) throws Exception {
   
        //1.获取执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        //获取数据源
        DataSource<String> source = env.fromElements("1, 2, 3, 4, 5"); //输入的是字符串
        //3.转化数据
        //flatMap:进一出多
        source.flatMap(new FlatMapFunction<String, Integer>() {
   
            @Override
            public void flatMap(String value, Collector<Integer> out) throws Exception {
   
                String[] split = value.split(", ");//将字符串拆开
                for (String s : split) {
   
                    out.collect(Integer.parseInt(s));   //将字符串转化为int
                }
            }
        })
        //4.输出结果
        .print();
        //5.触发程序执行
    }
}

需要注意的点:

  • 我输入字符串时,每个数字的间隔是“, ”,除了逗号外还有空格,所以在第三步split将字符串拆开时也需要加个空格
练习三

每个数字累计求和

package cn.tedu.dataset;

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.common.functions.ReduceFunction;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.util.Collector;

public class TransformationTest {
   
    public static void main(String[] args) throws Exception {
   
        //1.获取执行环境
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
        //获取数据源
        DataSource<String> source = env.fromElements("1, 2, 3, 4, 5"); //输入的是字符串
        //3.转化数据
        //flatMap:进一出多
        source.flatMap(new FlatMapFunction<String, Integer>() {
   
            @Override
            public void flatMap(String value, Collector<Integer> out) throws Exception {
   
                String[] split = value.split(", ");//将字符串拆开
                for (String s : split) {
   
                    out.collect(Integer.parseInt(s));   //将字符串转化为int
                }
            }
        }).reduce(new ReduceFunction<Integer>() {
   
            @Override
            public Integer reduce(Integer value1, Integer value2) throws Exception {
   
                return value1+value2;
            }
        })
        //4.输出结果
        .print();
        //5.触发程序执行
    }
}

与练习二相比只在第三步底下增加了一点,其他不变&#

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值