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();
    }
}
相关推荐
实证小助手2 小时前
世界各国经济政策不确定指数(1997-2024年)月度数据
大数据·人工智能
csgo打的菜又爱玩2 小时前
1.JobManager启动流程解析.md
大数据·flink·源代码管理
Elastic 中国社区官方博客3 小时前
使用 Jina 远程 MCP 服务器的 Agentic 工作流
大数据·运维·人工智能·elasticsearch·搜索引擎·运维开发·jina
金融小师妹4 小时前
AI宏观情景模型解析:能源冲击与通胀粘性下的全球经济增长下修路径
大数据·svn·逻辑回归·能源
上海锝秉工控5 小时前
总线编码器:工业自动化的“智慧神经”
大数据·人工智能·自动化
互联网科技看点5 小时前
AtlasX Protocol 获 200 万美元种子轮融资
大数据·人工智能·区块链
观远数据5 小时前
AI优先的BI试点新玩法:如何用自然语言分析重构业务决策流程
大数据·人工智能·数据挖掘
ApacheSeaTunnel6 小时前
Apache SeaTunnel Zeta 为什么能做到“又快又稳”?
大数据·开源·数据集成·seatunnel·技术分享·数据同步
源码宝7 小时前
新一代医院信息系统云HIS,多租户共享,java版HIS+EMR+LIS全套源码
java·大数据·源码·云his·his系统·源代码·医院信息系统
跨境卫士-小汪7 小时前
多渠道获客复杂化跨境卖家如何优化整体结构
大数据·人工智能·产品运营·跨境电商·跨境