sink算子: 把计算之后的最终结果写入到某个位置
1.文件
1)writeAsText/ writeAsCsv
弃用的方法,但是可以使用
如果并行度为1,直接以一个文件的形式体现,内容是追加的,因为设置了并行度env.setParallelism(1)
如果并行度大于1,以一个目录的形式出现,并行度是几就有几个文件,不设置并行度时,CPU的核数为并行度数目
dataStreamOriginal.writeAsText("E://path")
2) addSink(StreamingFileSink)
StreamingFileSink.forRowFormat获取内部类RowFormatBuilder的对象,内部类RowFormatBuilder的对象调用build()获取到单利SimpleStringEncoder
目前建议使用的方法,不管并行度是多少,都以目录形式出现
dataStreamOriginal.addSink(StreamingFileSink.forRowFormat( new Path("E://path"), new SimpleStringEncoder[SensorReading]() ).build()
/**
* 把结果写入到文件,下沉到sink
* @param dataStreamOriginal
*/
def sink_File(dataStreamOriginal: DataStream[SensorReading]): Unit ={
//文件:E://path 只有一个分区,因为设置了并行度env.setParallelism(1)
//不设置并行度时,CPU的核数为并行度数目,此时路径为目录级别,文件数为CPU核数
//分区:则是以目录形式,每一个分区产生一个文件
//被弃用的写入文件的方法
dataStreamOriginal.writeAsText("E://path")
//dataStreamOriginal.writeAsCsv()
//官方建议我们写入文件使用的方法
dataStreamOriginal.addSink(
//StreamingFileSink.forRowFormat获取内部类RowFormatBuilder的对象
//内部类RowFormatBuilder的对象调用build()获取到单利SimpleSt