Apache flink flink apache:什么是最有效的:读取文件并将文本拆分为元组或读取csv

Apache flink flink apache:什么是最有效的:读取文件并将文本拆分为元组或读取csv,apache-flink,Apache Flink,我编写了以下小代码,将文件夹中的文件放入数据流: public class TextFromDirStream { // // Program // public static void main(String[] args) throws Exception { // set up the execution environment final StreamExecutionEnvironment env = StreamExecutionEnvironment

我编写了以下小代码,将文件夹中的文件放入数据流:

public class TextFromDirStream {

//
//  Program
//

public static void main(String[] args) throws Exception {

    // set up the execution environment
    final StreamExecutionEnvironment env = StreamExecutionEnvironment
            .getExecutionEnvironment();

    // monitor directory, checking for new files
    // every 100 milliseconds
    TextInputFormat format = new TextInputFormat(
            new org.apache.flink.core.fs.Path("file:///tmp/dir/"));

    DataStream<String> inputStream = env.readFile(
            format,
            "file:///tmp/dir/",
            FileProcessingMode.PROCESS_CONTINUOUSLY,
            100,
            FilePathFilter.createDefaultFilter());

    inputStream.print();

    // execute program
    env.execute("Java read file from folder Example");
}
公共类TextFromDirStream{
//
//节目
//
公共静态void main(字符串[]args)引发异常{
//设置执行环境
最终StreamExecutionEnvironment env=StreamExecutionEnvironment
.getExecutionEnvironment();
//监视目录,检查新文件
//每100毫秒
TextInputFormat=新的TextInputFormat(
新的org.apache.flink.core.fs.Path(“file:///tmp/dir/"));
DataStream inputStream=env.readFile(
格式,
"file:///tmp/dir/",
FileProcessingMode.PROCESS\u连续,
100,
FilePathFilter.createDefaultFilter());
inputStream.print();
//执行程序
execute(“Java从文件夹读取文件示例”);
}
}

我的下一步是处理文件内容(csv)。处理这个问题最有效的方法是什么?我是否更改代码以解析文本文件inputStream并从一开始就将其转换为元组或将readFile转换为CSV。我问这个问题是因为我很难找到关于如何将文本拆分为元组的示例或文档


提前感谢

从代码开始,流中的每个事件(
inputStream
)都是一行字符串。您只需将一条线映射到一个元组:

DataStream<Tuple2<Long, String>> parsedStream = inputStream
   .map((line) -> {
     String[] cells = line.split(",");
     // Only keep first and third cells
     return new Tuple2(Long.parseLong(cells[2]), cells[0]); 
   });
DataStream parsedStream=inputStream
.map((行)->{
String[]cells=line.split(“,”);
//只保留第一个和第三个单元格
返回新的Tuple2(Long.parseLong(cells[2]),cells[0]);
});

您还可以使用包含字段选择的
readCsvFile
,它能够创建TupleX或POJO(但是readCsvFile没有连续的进程)。还要注意的是,如果您连续使用PROCESS_,每个修改的文件都将被完全(再次)处理,这与一个文件不完全匹配

嗨,埃里克,非常感谢你的回答。我想需要做一点小的修改不?=>。。。返回新的Tuple2(Long.parseLong(cells[2]),cells[0]);};