Spark学习笔记:Spark Streaming与Spark SQL协同工作

Spark Streaming与Spark SQL协同工作

Spark Streaming可以和Spark Core,Spark SQL整合在一起使用,这也是它最强大的一个地方。

实例:实时统计搜索次数大于3次的搜索词

package StreamingDemo

import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkConf
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SparkSession}
import org.apache.spark.streaming.{Seconds, StreamingContext}

/**
  * Spark Streaming与Spark相结合
  * 需求:实时统计搜索次数大于3次的搜索词
  */
object StreamingAndSQLDemo {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.WARN)
    System.setProperty("HADOOP_USER_NAME", "Setsuna")
    val conf = new SparkConf()
      .setAppName(this.getClass.getSimpleName)
      .setMaster("local[2]")
    val ssc = new StreamingContext(conf, Seconds(2))

    //开启checkpoint
    ssc.checkpoint("hdfs://Hadoop01:9000/checkpoint")

    //分词,wordcount,记录状态
    val resultDStream =
      ssc
        .socketTextStream("Hadoop01", 6666)
        .flatMap(_.split(" "))
        .map((_, 1))
        .updateStateByKey((values: Seq[Int], state: Option[Int]) => {
          var count = state.getOrElse(0)
          for (value <- values) {
            count += value
          }

          Option(count)
        })

    //将wordcount结果存进表里
    resultDStream.foreachRDD(rdd=>{
      //创建SparkSession对象
      val sparkSession=SparkSession.builder().getOrCreate()
      //创建Row类型的RDD
      val rowRDD=rdd.map(x=>Row(x._1,x._2))
      //创建schema
      val schema=StructType(List(
        StructField("word",StringType,true),
        StructField("count",IntegerType,true)
      ))
      //创建DataFrame,并注册临时视图
      sparkSession.createDataFrame(rowRDD,schema).
        createOrReplaceTempView("wordcount")
      //进行查询并在Console里输出
      sparkSession.sql("select * from wordcount where count>3").show()
    })
    ssc.start()
    ssc.awaitTermination()
  }
}

测试
在nc里输入数据

Console里的输出

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值