1、Spark2.4中,StructuredStreaming目前支持的sink只有FileSink、KafkaSink、ConsoleSink、MemorySink和ForeachSink
2、要使用ForeachSink自定义sink,必须实现ForeachWriter[T](),包括open(),process(),close()三个方法:
3、在每个batch中,这三个方法各调用一次,相当每批数据调用一次。
class redisSink extends ForeachWriter[Row](){
override def open(partitionId: Long, version: Long): Boolean ={
//这个方法进行一些初始化,如redis,获取连接
}
override def process(value: Row): Unit ={
//具体的处理逻辑,写数据到数据库中
}
override def close(errorOrNull: Throwable): Unit = {
//关闭连接
}
4、sink到mysql实例
object ForeachSinkApp {
def main(args: Array[String]): Unit = {
val window_size = 10//args(0) //窗口长度
//窗口滑动距离应当小于或等于窗口长度
val slide_size = 5//if (args.length ==