Flink的数据流向图,如下图所示。
Source 就是数据的来源,中间的 Transformations其实就是具体的处理逻辑,进行一系列的转换,最后,将结果 Sink 到目的地,或者说存储到某个地方。
writeAsText()
/TextOutputFormat
- 以字符串的形式逐行写入元素。字符串是通过调用每个元素的toString()
方法获得的。- writeAsFormattedText() / TextOutputFormat - 以字符串的形式逐行写入元素。可以通过调用用户定义的format() 方法获取每个元素的字符串值。
writeAsCsv(...)
/CsvOutputFormat
- 以逗号分隔值文件的形式写入元组。行和字段间的分隔符是可以配置的。每个字段的值可以通过对象.toString()方法获取。print()
/printToErr()
- 在标准输出/标准错误流中打印每个元素的toString()
值。write()
/FileOutputFormat
-方法和用户自定义文件输出的基类。支持自定义对象到字节的转换。output()
/OutputFormat
- 较为通用的输出方法,用于不基于文件的Data Sink(例如将结果存储在数据库中)。
使用案例介绍:
object DataSetSinkApp {
def main(args: Array[String]): Unit = {
var list = 1 to 10
val env: ExecutionEnvironment = ExecutionEnvironment
.getExecutionEnvironment
val data: DataSet[Int] = env.fromCollection(list)
data.writeAsText("data/output/sink/list",
writeMode = WriteMode.OVERWRITE)
.setParallelism(2) // 输出到两个文件中
// Note: 一定要执行下面这段代码,否则不会输出
env.execute("DataSetSinkApp")
}
}
文件输出结果: