Structured Streaming——WordCount

import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.{DataFrame, SparkSession}

object WordCountDemo1 {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.WARN)

    val spark = SparkSession.builder()
      .appName("WordCountDemo1")
      .master("local").getOrCreate()
    import spark.implicits._
    /**
      * Socket方式是最简单的数据输入源,本程序就是使用的这种方式,
      * 用户只需要指定"socket"形式并配置监听的IP和Port即可。
      * Socket方式Streaming是接收UTF8的text数据,并且这种方式最后只用于测试,不要用户端到端的项目中。
      */
    val lines: DataFrame = spark.readStream
      .format("socket")
      .option("host", "master")
      .option("port", "9999")
      .load()

    /**
      * 首先将接受到的数据流lines转换为String类型的序列;
      * 接着每一批数据都以空格分隔为独立的单词;
      * 最后再对每个单词进行分组并统计次数。
      */
    val words = lines.as[String].flatMap(_.split(" "))
    val wordCounts: DataFrame = words.groupBy("value").count()
    /**
      * 通过DataFrame对象的writeStream方法获取DataStreamWrite对象,DataStreamWrite类定义了一些数据输出的方式。
      * 本程序将数据输出到控制终端。
      * 注意:只有在调用start()方法后,才开始执行Streaming进程。
      * start()方法会返回一个StreamingQuery对象,用户可以使用该对象来管理Streaming进程。
      * 本程序中调用awaitTermination()方法阻塞接收所有数据。
      */
    val query = wordCounts.writeStream.outputMode("complete")
      .format("console").start()

    //注意:使用append这个输出模式时,不能用wordCounts
    //    val query = words.writeStream.outputMode("append")
    //      .format("console").start()

    query.awaitTermination()
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值