4.1、Flink任务怎样读取集合中的数据

1、API说明

非并行数据源:

def fromElements[T: TypeInformation](data: T*): DataStream[T]

def fromCollection[T: TypeInformation](data: Seq[T]): DataStream[T]

def fromCollection[T: TypeInformation] (data: Iterator[T]): DataStream[T]

并行数据源:

def fromParallelCollection[T: TypeInformation] (data: SplittableIterator[T])

使用场景:

常用来调试代码使用


2、这是一个完整的入门案例

开发语言:Java1.8

Flink版本:flink1.17.0

java 复制代码
package com.baidu.datastream.source;

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.NumberSequenceIterator;

import java.util.Arrays;
import java.util.List;

// --------------------------------------------------------------------------------------------
//  TODO 从集合中读取数据
// --------------------------------------------------------------------------------------------

/*
 *  TODO 通过`读取Java集合中数据`来创建 DataStreamSource
 *
 *  方法1:fromCollection
 *        Collection、Iterator -> DataStreamSource
 *  方法2:fromElements
 *        OUT... data -> DataStreamSource
 *  方法3:fromParallelCollection
 *        SplittableIterator -> DataStreamSource
 *  重要提示:
 *       fromCollection、fromElements 创建的是非并行source算子(并行度只能为1)
 *       fromParallelCollection 创建的是并行算子(并行度>=1)
 * */

public class ReadCollection {
    public static void main(String[] args) throws Exception {
        fromCollection();
        //fromElements();
        //fromParallelCollection();
    }

    public static void fromCollection() throws Exception {
        // 1.获取执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(3);

        // 2.读取Java集合数据
        List<String> list = Arrays.asList("刘备", "张飞", "关羽", "赵云", "马超", "黄忠");
        env.fromCollection(list).print();

        // 3.触发程序执行
        env.execute();
    }

    public static void fromElements() throws Exception {
        // 1.获取执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(3);

        // 2.读取给定的对象序列
        env.fromElements("刘备", "张飞", "关羽", "赵云", "马超", "黄忠").print();

        // 3.触发程序执行
        env.execute();
    }

    public static void fromParallelCollection() throws Exception {
        // 1.获取执行环境
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(3);

        // 2.读取给定的对象序列
        NumberSequenceIterator numberSequenceIterator = new NumberSequenceIterator(1, 10);

        env.fromParallelCollection(numberSequenceIterator, Long.class).print();
        /*
         * 注意: fromParallelCollection生成的source为并行算子
         *       集合中的数据会被平均分配到并行子任务中去
         * */

        // 3.触发程序执行
        env.execute();
    }
}
相关推荐
腾讯云开发者27 分钟前
太古可口可乐的数智跃迁:用 AI 重构快消渠道的“最后一公里”
大数据
GIS数据转换器39 分钟前
2025无人机在农业生态中的应用实践
大数据·网络·人工智能·安全·无人机
武子康1 小时前
大数据-132 Flink SQL 实战入门 | 3 分钟跑通 Table API + SQL 含 toChangelogStream 新写法
大数据·后端·flink
Lion Long1 小时前
PB级数据洪流下的抉择:从大数据架构师视角,深度解析时序数据库选型与性能优化(聚焦Apache IoTDB)
大数据·性能优化·apache·时序数据库·iotdb
Lx3522 小时前
Flink背压机制:原理与调优策略
大数据
Lx3522 小时前
Flink容错机制:Checkpoint和Savepoint深入解析
大数据
QQ5416451213 小时前
【小增长电商软件分享】微信私域淘宝电商补单/做基础销量:如何有效控制粉丝错货、复购、订单插旗及客服转账返款等常见痛点|粉丝订单管理|电商鱼塘运营方案
大数据·电商私域粉丝管理·电商私域运营系统解决方案·粉丝订单关系系统
字节跳动数据平台3 小时前
多模态数据湖技术深化,Data Agent新能力发布!“认知”将决定企业上限
大数据
字节跳动数据平台4 小时前
得物×火山引擎:Data Agent驱动财务管理智能升级
大数据
想ai抽4 小时前
Spark的shuffle类型与对比
大数据·数据仓库·spark