某高校为大数据相关专业的学生开设了多门课程,为了能够实时地查找出目标课程,需要在IntelliJ IDEA中使用Scala的Spark Streaming编程实现从一台服务器的8888端口上接收课程数据,课程数据需手动在服务器的8888端口输入,输入的课程数据如表所示,每一条数据有2个字段,分别表示课程编号和课程名称,以空格分隔。现目标课程是“Hadoop”和“Spark”,需要查询两门课程及对应课程编号。
时间: 2024-02-09 13:08:32 浏览: 113
大数据编程基础(Scala、JVM、Hadoop、Spark)
5星 · 资源好评率100%
好的,根据你的描述,我可以给出一个基本的Scala的Spark Streaming程序实现。以下是代码:
```scala
import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
object CourseSearch {
def main(args: Array[String]): Unit = {
// 创建SparkConf和StreamingContext
val conf = new SparkConf().setAppName("CourseSearch").setMaster("local[2]")
val ssc = new StreamingContext(conf, Seconds(1))
// 创建一个DStream,从服务器上的8888端口接收数据
val lines = ssc.socketTextStream("localhost", 8888)
// 过滤出包含"Hadoop"或"Spark"的课程
val targetCourses = lines.filter(line => line.contains("Hadoop") || line.contains("Spark"))
// 将目标课程的编号和名称提取出来,形成一个(key, value)对
val courseInfo = targetCourses.map(line => line.split(" ")).map(fields => (fields(0), fields(1)))
// 打印出目标课程的编号和名称
courseInfo.print()
// 启动StreamingContext并等待程序结束
ssc.start()
ssc.awaitTermination()
}
}
```
你只需要按照要求将课程数据手动输入到服务器的8888端口即可。程序会过滤出包含“Hadoop”或“Spark”的课程,并输出这些课程的编号和名称。
阅读全文