【Spark 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()

如上我已經把完整的代碼分享出來了,並且加上了完整的註釋 ,喜歡小編的朋友別忘了點個關注哦,我會繼續更新更好的內容分享出來

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章