【大数据技术Spark】DStream编程操作讲解实战(图文解释 附源码)
创始人
2024-04-27 02:34:13
0

DStream编程

批处理引擎Spark Core把输入的数据按照一定的时间片(如1s)分成一段一段的数据,每一段数据都会转换成RDD输入到Spark Core中,然后将DStream操作转换为RDD算子的相关操作,即转换操作、窗口操作以及输出操作。RDD算子操作产生的中间结果数据会保存在内存中,也可以将中间的结果数据输出到外部存储系统中进行保存。

转换操作

1:无状态转换操作

无状态转化操作每个批次的处理不依赖于之前批次的数据。常见的 RDD 转化操作,例如 Map()、filter()、ReduceByKey() 等,都是无状态转化操作。 

2:有状态转化操作:

有状态转化操作需要使用之前批次的数据或者是中间结果来计算当前批次的数据。有状态转化操作包括基于滑动窗口的转化操作和追踪状态变化的转化操作。

 DStream API提供的与窗口操作相关的方法

DStream API提供的与输出操作相关的方法

 编写Spark Streaming程序的基本步骤是:

1)通过创建输入DStream来定义输入源。

2)通过对DStream应用转换操作和输出操作来定义流计算。

3)用streamingContext.start()来开始接收数据和处理流程

 4)通过streamingContext.awaitTermination()方法来等待处理结束(手动结束或因为错误而结束)。

5)可以通过streamingContext.stop()来手动结束流计算进程。

通过示例进行演示,此示例为监视一个文件夹的log日志,并计算每个单词出现的次数

cogroup和join算子需要两个并行数据流,对两个数据流直接关联,不同的是join算子是把两个RDD按照相同的key拼在一起,类似SQL中的等值连接,可以类似的使用其他算子进行RDD的左连接等,而cogroup算子是把两个RDD按照key拼起来,但是它会汇总得到的value,最后的结果的条数是根据key决定的,有多少key就汇总成多少条数据,然后把RDD的所有相同的key的value放到一个Iterable里面,类似于SQL里面的全连接

设置为本地运行模式,2个线程,一个监听,另一个处理数据val sparkConf = new SparkConf().setAppName("WordCountStreaming").setMaster("local[2]")// 时间间隔为20秒val stc = new StreamingContext(sparkConf, Seconds(20))//定义输入源,监听本地目录,也可以采用HDFS文件val lines = stc.textFileStream("E:/log")//应用转换操作flatMap流计算val words = lines.flatMap(_.split(" "))//应用转换操作Map和ReduceByKey计算val wordCounts = words.Map(x => (x, 1)).ReduceByKey(_ + _)wordCounts.print()//开始接收数据和处理流程stc.start()//等待处理结束stc.awaitTermination()
//创建两个可被并行操作的分布式数据集val idName = sc.parallelize(Array((1, "张三"), (2, "李四"), (3, "王五")))val idAge = sc.parallelize(Array((1, 30), (2, 29), (4, 21)))println("\ncogroup\n")//对两个并行数据集进行cogroup操作idName.cogroup(idAge).collect().foreach(println)println("\njoin\n")//对两个并行数据集进行join操作idName.join(idAge).collect().foreach(println)//3.获取StreamingContext对象,5秒一个批次val ssc = new StreamingContext(sparkContext,Seconds(5))//4.接收socket的数据val textStream: ReceiverInputDStream[String] = ssc.socketTextStream("hhaonote",9999)//5.获取每一行的单词val words: DStream[String] = textStream.flatMap(_.split(" "))//6.为每一个单词置为1val wordAndOne: DStream[(String, Int)] = words.Map((_,1))//7.每隔10秒统计最近10秒的搜索词出现的次数val result: DStream[(String, Int)] = wordAndOne.ReduceByKeyAndWindow((x:Int,y:Int)=>x+y,Seconds(10),Seconds(10))//8.打印result.print()

创作不易 觉得有帮助请点赞关注收藏~~~ 

相关内容

热门资讯

政策组合拳显成效 资本市场吸引... 证券时报记者 程丹 当上证指数上涨到3800点附近,A股日成交额连续多个交易日站稳2万亿元上方,上市...
东风电子科技股份有限公司 关于... 本公司董事会及全体董事保证本公告内容不存在任何虚假记载、误导性陈述或者重大遗漏,并对其内容的真实性、...
原创 有... 有意思了,太阳队更新员工手册,包含限制诉讼的协议 菲尼克斯太阳队在其员工手册中加入了一项新条款,保护...
德温特:阿莱格里依然是原来的他... 在即将到来的意大利杯比赛中,AC米兰将迎战莱切,这场比赛不仅是球队争取荣誉的机会,也是年轻球员德温特...
鲍威尔称利率“仍有适度限制性”... 在上周美联储宣布降息后的首次公开演讲中,美联储主席鲍威尔和上周发布会上一样继续为进一步降息留下空间,...
*ST汇科获得发明专利授权:“... 证券之星消息,根据天眼查APP数据显示*ST汇科(300561)新获得一项发明专利授权,专利名为“基...
国泰海通证券梁中华:美联储降息... 中证报中证网讯(记者 王鹤静)9月23日晚,国泰海通证券宏观首席分析师梁中华在做客中国证券报“金牛E...
女子上门代喂,被100斤阿拉斯... 近些年,随着宠物经济不断发展 “上门遛狗,上门喂猫”等服务横空出世 日常就是铲屎、换水、加粮和陪伴玩...
以12项罪名追究白家犯罪集团刑... 2025年9月19日至22日,广东省深圳市中级人民法院一审公开开庭审理了白所成、白应苍等21名被告人...
广东率先开考碳排放管理员!持证... 近日,首批从业人员在广州交易集团考场参与碳排放管理员职业技能等级认定考试。通过考核的人员可获得职业技...