在idea中创建spark streaming scala版本wordcount程序,结合nc实现流计算。
虽然java和scala都可以开发spark程序,两者对比之下,scala的确简洁很多。
1. 安装scala
参考下载地址如下,这里略过。
Scala 2.12.0 | The Scala Programming Language
准备nc测试环境,有linux更方便一些。
2. 建立idea scala项目工程,并添加pom依赖
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.12</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
3. 创建测试程序
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object StreamWordCount {
def main(args: Array[String]): Unit = {
//1.初始化 Spark 配置信息
val sparkConf = new
SparkConf().setMaster("local[*]").setAppName("StreamWordCount")
//2.初始化 SparkStreamingContext
// 这里3秒的时间间隔
val ssc = new StreamingContext(sparkConf, Seconds(3))
ssc.sparkContext.setLogLevel("WARN")
//3.通过监控端口创建 DStream,读进来的数据为一行行
val lineStreams = ssc.socketTextStream("192.168.0.181", 9000)
//将每一行数据做切分,形成一个个单词
val wordStreams = lineStreams.flatMap(_.split(" "))
//将单词映射成元组(word,1)
val wordAndOneStreams = wordStreams.map((_, 1))
//将相同的单词次数做统计
val wordAndCountStreams = wordAndOneStreams.reduceByKey(_+_)
//打印
wordAndCountStreams.print()
//启动 SparkStreamingContext
ssc.start()
ssc.awaitTermination()
}
}
4. 启动nc并运行spark streaming程序
[root@bogon ~]# nc -l 9000
hello world
hell stream
hello spark
可以看到idea控制台,每3秒有一次输出。
-------------------------------------------
Time: 1644990894000 ms
-------------------------------------------
(stream,1)
(hell,1)
-------------------------------------------
Time: 1644990903000 ms
-------------------------------------------
(hello,1)
(spark,1)