Apache Flink 零基础入门(十二)Flink sink

本文详细介绍了Apache Flink中DataSet的Sink操作,包括如何将数据写入文本文件、CSV文件及标准输出,同时探讨了如何处理文件或文件夹已存在的问题,通过设置WriteMode.OVERWRITE来覆盖原有文件,以及如何通过设置并行度将数据写入多个文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将DataSet中的数据Sink到哪里去。使用的是对应的OutPutFormat,也可以使用自定义的sink,有可能写到hbase中,hdfs中。

  • writeAsText() / TextOutputFormat ,以String的形式写入
  • writeAsCsv(...) / CsvOutputFormat,以CSV的方式写进去

  • print() / printToErr() / print(String msg) / printToErr(String msg)以标准输出

 writeAsText

object DataSetSinkApp {
  def main(args: Array[String]): Unit = {
    val environment = ExecutionEnvironment.getExecutionEnvironment
    val data = 1.to(10)
    val text = environment.fromCollection(data)
    val filePath = "E:/test"
    text.writeAsText(filePath)
    environment.execute("DataSetSinkApp")
  }
}

如果E:/test文件或者文件夹存在,将无法执行成功。除非增加一个WriteMode.OVERWRITE

text.writeAsText(filePath, WriteMode.OVERWRITE)

这样就在E盘下新建了一个test文件,内容是1到10。

那么如何保存到文件夹中?

text.writeAsText(filePath, WriteMode.OVERWRITE).setParallelism(2)

设置并行度为2,这样就存到test文件夹下,两个文件1和2

默认情况下,不设置并行度,会把结果写到一个文件中,如果设置并行度,那么每一个并行度都对应一个输出。

Java

    public static void main(String[] args) throws Exception {
        ExecutionEnvironment executionEnvironment = ExecutionEnvironment.getExecutionEnvironment();
        List<Integer> info = new ArrayList<>();
        for(int i = 1;i <=10; i++) {
            info.add(i);
        }
        DataSource<Integer> data1 = executionEnvironment.fromCollection(info);
        String filePath = "E:/test2";
        data1.writeAsText(filePath, FileSystem.WriteMode.OVERWRITE);
        executionEnvironment.execute("JavaDataSetSinkApp");
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值