Flink从入门到真香(7、Sink数据输出-文件)

Source 是 Flink 程序的输入,Sink 就是 Flink 程序处理完Source后数据的输出,比如将输出写到文件、sockets、外部系统、或者仅仅是显示(在大数据生态中,很多类似的,比如Flume里也是对应的Source/Channel/Sink),Flink 提供了多种数据输出方式

跟在代码中直接写不同(比如可以在RickMap中open、close、map中直接写)他可以保存一些状态,容错重试机制等等

package com.mafei.sinktest

import org.apache.flink.api.common.serialization.SimpleStringEncoder
import org.apache.flink.core.fs.Path
import org.apache.flink.streaming.api.functions.sink.filesystem.StreamingFileSink
import org.apache.flink.streaming.api.scala.{StreamExecutionEnvironment, createTypeInformation}

case class SensorReadingTest3(id: String,timestamp: Long, temperature: Double)

object FileSink {
  def main(args: Array[String]): Unit = {
    //创建执行环境
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    val inputStream= env.readTextFile("/opt/java2020_study/maven/flink1/src/main/resources/sensor.txt")
    env.setParallelism(1)

    //先转换成样例类类型
    val dataStream = inputStream
      .map(data =>{
        val arr = data.split(",")   //按照,分割数据,获取结果
        SensorReadingTest3(arr(0), arr(1).toLong,arr(2).toDouble)  //生成一个传感器类的数据,参数中传toLong和toDouble是因为默认分割后是字符串类别
      })

    dataStream.print()

    //简单的输出到txt中的方法,已被flink弃用
//    dataStream.writeAsText("/opt/java2020_study/maven/flink1/src/main/resources/sink.txt")

    //新的输出方式-推荐
    dataStream.addSink(
      StreamingFileSink.forRowFormat(
        new Path("/opt/java2020_study/maven/flink1/src/main/resources/sink2.txt"),
        new SimpleStringEncoder[SensorReadingTest3]()   //可以在括号中传入编码,默认是udf-8
      ).build()
    )

    env.execute("udf test")
  }

}

代码结构及最终输出效果:

Flink从入门到真香(7、Sink数据输出-文件)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值