读取文件数据源
还可以选择使用基于文件的源函数从文件源中传输数据。
从文件源读取数据的源函数定义有:
- readTextFile(String path):逐行读取路径指定的文本文件,即符合TextInputFormat规范的文本文件,并以字符串形式返回。
- readFile(FileInputFormat inputFormat, String path):根据指定的文件输入格式读取(一次)文件。
- readFile(fileInputFormat, path, watchType, interval, pathFilter):这是前两个方法在内部调用的方法。它根据给定的fileInputFormat读取路径中的文件。
【示例】读取文件,并统计文件内的单词数量。
1、在IDEA中创建Flink项目;
2、在项目的src上单击右键,创建一个名为wc.txt的文本文件。
3、编辑wc.txt,输入以下内容并保存:
good good study day day up
4、流处理代码实现。
Scala代码:
import org.apache.flink.streaming.api.scala._ object FileSourceDemo { def main(args: Array[String]): Unit = { // 设置流执行环境 val env = StreamExecutionEnvironment.getExecutionEnvironment // 加载文件数据源,构造DataStream val textPath = "input/wc.txt" val text = env.readTextFile(textPath) // 对DataStream执行转换操作 text .flatMap { _.toLowerCase.split("\\W+").filter( _.nonEmpty ) } .map { (_, 1) } .print() // 触发流程序执行 env.execute("Simple Flink File Source Demo") } }
Java代码:
import org.apache.flink.api.common.functions.FlatMapFunction; import org.apache.flink.api.java.tuple.Tuple2; import org.apache.flink.streaming.api.datastream.DataStreamSource; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.util.Collector; /** * 文件数据源 */ public class FileSourceDemo { public static void main(String[] args) throws Exception { // 设置流执行环境 final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); // 加载文件数据源,构造DataStream String textPath = "input/wc.txt"; DataStreamSource<String> text = env.readTextFile(textPath); // 数据流转换 text.map(String::toLowerCase) // 转小写 .flatMap(new Splitter()) // flatMap转换 .print(); // 触发流程序执行 env.execute("Simple Flink File Source Demo"); } // 实现FlatMapFunction接口的函数 public static class Splitter implements FlatMapFunction> { @Override public void flatMap(String sentence, Collector<Tuple2<String, Integer>> out) throws Exception { for (String word: sentence.split(" ")) { // 分词 out.collect(new Tuple2<>(word, 1)); // 构造(word,1)发送给下游算子 } } } }
5、执行以上程序,输出结果如下:
2> (day,1) 6> (good,1) 2> (day,1) 6> (good,1) 2> (up,1) 6> (study,1)