【Structured Streaming】读取Socket数据

  • 前言

今天我们来学习如何用Structured Streaming读取Socket数据,在学习读取Socket数据之前呢,首先我们先扩展一些内容

 

  • 扩展

spark 2.0中初步提供了一些内置的source支持。

Socket source: 从socket连接中读取文本内容。

File source: 以数据流的方式读取一个目录中的文件。支持text、csv、json、parquet等文件类型。

Kafka source: 从Kafka中拉取数据,与0.10或以上的版本兼容,整合Kafka

 

通过以上内容我们可以看出 Structured Streaming可以读取Socket ,File ,Kafka的数据,后面的博客我也会更新另外两种方式的方法

 

  • 准备工作
nc -lk 9999
hadoop spark sqoop hadoop spark hive hadoop

由上可以看出我们启动了9999端口,并且在端口中输入了一批数据,等下我们会在代码中接收这批数据实行一个wordCount的效果

 

  • Code
     //创建SparkSession
    val spark: SparkSession = SparkSession.builder().appName("test01").master("local[*]").getOrCreate()

    //设置日志级别
    spark.sparkContext.setLogLevel("WARN")

    //读取最新数据 socketDatas内的数据为Row类型
    //host:连接的服务器IP地址
    //port:连接的端口号
    val socketDatas: DataFrame = spark.readStream.format("socket")
      .option("host", "node01")
      .option("port", "9999")
      .load()


    //根据业务逻辑进行数据处理
    //转换数据类型 因为socketDatas的数据类型为Row我们需要把他转为String类型尽心数据处理
    import spark.implicits._
    val strDatas: Dataset[String] = socketDatas.as[String]
    //处理数据 求出单词数量(WordCount)
    val resDatas: Dataset[Row] = strDatas.flatMap(x => x.split(" ")).groupBy("value").count().sort($"count".desc)


    //计算结果输出
    //format:表示数据输出到哪里
    //outputMode:表示输出哪些数据
    //trigger:触发器
    //start:开启任务
    //awaitTermination:等待关闭
    resDatas.writeStream
      .format("console")
      .outputMode("complete")
      .trigger(Trigger.ProcessingTime(0))
      .start()
      .awaitTermination()

如上我已经把完整的代码分享出来了,并且加上了完整的注释 ,喜欢小编的朋友别忘了点个关注哦,我会继续更新更好的内容分享出来

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值