代码-第7章 Spark Streaming-林子雨编著《Spark编程基础(Python版,第2版)》
内容提要
《Spark编程基础(Python版,第2版)》是由厦门大学林子雨编著的教材,提供了命令行和代码,包括文件流、网络流、队列流、窗口流和状态流等内容。
延伸解读
从文件流到状态流:示例的递进关系
文章按文件流、网络流、队列流、窗口流和状态流的顺序给出代码,这并非随意排列,而是对应 Spark Streaming 从无状态到有状态、从简单到复杂的处理模式。文件流和网络流只做单批次单词计数;窗口流引入滑动窗口聚合;状态流则通过 updateStateByKey 跨批次累加。读者按此顺序实践,能自然理解不同抽象层的适用场景。
checkpoint 在窗口与状态操作中的必要性
窗口流和状态流的示例都显式调用了 ssc.checkpoint 并指定目录。这是因为窗口操作需要保存历史批次数据以计算滑动区间,而 updateStateByKey 需要持久化状态以便故障恢复。若省略 checkpoint,这些操作会直接报错。文章通过代码展示了这一关键配置,提醒读者在开发有状态流应用时不能忽略检查点目录的设置。
输出方式的多样性:pprint、saveAsTextFiles 与 MySQL
文章展示了三种输出方式:pprint 用于控制台调试,saveAsTextFiles 将每个批次结果保存为文本文件,NetworkWordCountStatefulDB.py 则通过 foreachRDD 和 pymysql 将结果写入 MySQL。这体现了 Spark Streaming 输出操作的可扩展性。读者需注意,foreachRDD 内部使用 foreachPartition 和数据库连接,实际部署时应考虑连接池和事务管理,避免频繁创建连接。
本地模式与外部依赖的配合
所有示例均以 local[2] 或 local 模式运行,并依赖外部工具如 nc 生成 socket 数据流。这种设计便于在单机环境验证逻辑,但也意味着读者需要预先启动 nc 监听或运行 DataSourceSocket.py 作为服务端。文章通过命令行步骤明确了这一配合关系,提醒读者在运行网络流示例前确保端口未被占用且服务端已就绪。
Q&A
《Spark编程基础(Python版,第2版)》的主要内容是什么?
该教材主要介绍了Spark Streaming的使用,包括文件流、网络流、队列流、窗口流和状态流等内容。
如何使用pyspark库创建SparkContext和StreamingContext?
可以通过SparkConf配置应用名称和主节点,然后使用SparkContext和StreamingContext进行创建。
如何通过textFileStream读取文件流数据并进行单词计数?
使用textFileStream读取文件流数据后,可以通过flatMap和reduceByKey进行单词计数。
NetworkWordCount.py示例的功能是什么?
该示例展示了如何通过socket接收数据并进行单词计数。
如何使用窗口操作进行单词计数?
可以使用WindowedNetworkWordCount.py示例,通过窗口操作对接收到的单词进行计数。
如何将单词计数结果存储到MySQL数据库中?
可以在NetworkWordCountStatefulDB.py中使用pymysql库将结果插入到MySQL数据库中。