TIA Context实战:构建PLC知识图谱让AI读懂梯形图
2026/10/26 13:29:15
核心依赖是 Flink 的兼容模块:
<dependency><groupId>org.apache.flink</groupId><artifactId>flink-hadoop-compatibility</artifactId><version>2.2.0</version></dependency>如果你要在本地(IDE / MiniCluster)跑起来,通常还需要带上一个 Hadoop 客户端依赖(本地有 class 才能初始化 Hadoop 相关类):
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.10.2</version><scope>provided</scope></dependency>实战建议:
hadoop-client;guava、jackson、netty版本冲突)。Flink 通过HadoopInputs提供两种方式把 Hadoop InputFormat 包装成 Flink InputFormat:
readHadoopFile(...):用于继承自 Hadoop 的 FileInputFormat的场景(典型:读 HDFS 文件类格式)createHadoopInput(...):用于通用 InputFormat(不一定是文件类,例如某些外部系统的 InputFormat)包装后的 Source 输出类型是一个二元组:Tuple2<K, V>
f0:keyf1:value这点非常重要:你后续处理 DataStream 的时候,要把 key/value 拆开理解。
下面示例演示如何把 Hadoop 的KeyValueTextInputFormat作为 Flink Source:
importorg.apache.flink.api.java.tuple.Tuple2;importorg.apache.flink.streaming.api.datastream.DataStream;importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;importorg.apache.flink.hadoopcompatibility.HadoopInputs;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapred.KeyValueTextInputFormat;publicclassHadoopInputFormatDemo{publicstaticvoidmain(String[]args)throwsException{StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();StringtextPath="hdfs:///path/to/input";KeyValueTextInputFormattextInputFormat=newKeyValueTextInputFormat();DataStream<Tuple2<Text,Text>>input=env.createInput(HadoopInputs.readHadoopFile(textInputFormat,Text.class,Text.class,textPath));// 业务处理:把 Text 转成 StringDataStream<String>lines=input.map(kv->"key="+kv.f0.toString()+", value="+kv.f1.toString());lines.print();env.execute("hadoop-inputformat-demo");}}常见适配场景:
容易踩的坑:
Tuple2<K,V>,不要直接当成一行文本