- 前言
今天我们来学习如何用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()
如上我已经把完整的代码分享出来了,并且加上了完整的注释 ,喜欢小编的朋友别忘了点个关注哦,我会继续更新更好的内容分享出来
625

被折叠的 条评论
为什么被折叠?



