PySpark Streaming 技术详解手册 (DStream & Structured)

针对国内,国外面试者。
PySpark Streaming 技术详解手册 (DStream & Structured)

1. 简介 (Introduction)

在 PySpark 的生态系统中,流处理经历了两个主要阶段。为了深入理解 Spark 的流计算机制,我们需要首先掌握传统的 Spark Streaming (DStream),然后过渡到现代的 Structured Streaming

这种演进体现了大数据处理从“底层 API”向“高级 SQL 抽象”的转变。


第一部分:Spark Streaming (DStream)

1.1 概述 (Overview)

Spark Streaming 是早期的流处理引擎。它使用微批处理 (Micro-batching) 架构。

它不是实时处理单条记录,而是将接收到的实时数据流拆分成一个个小的批次(Batches),每个批次实际上是一个 RDD。

  • DStream (Discretized Stream):这是其核心抽象,表示连续的 RDD 序列。
  • 处理时间 (Processing Time):DStream 主要基于数据到达系统的时间进行处理。

1.2 DStream 核心实例 (DStream Example)

要编写 DStream 程序,我们需要使用 StreamingContext 作为入口点。

场景:监听本地端口 9999,统计实时输入的单词数量。

完整代码

from pyspark import SparkContext
from pyspark.streaming import StreamingContext

# 1. 初始化 Context
# "local[2]" 表示启动两个线程:一个接收数据,一个处理数据
sc = SparkContext("local[2]", "DStream_App")
ssc = StreamingContext(sc, 1)  # 1秒作为一个批次

# 2. 创建输入源 (Input Source)
# 监听 localhost 的 9999 端口
lines = ssc.socketTextStream("localhost", 9999)

# 3. 转换操作 (Transformations)
# DStream 的操作与 RDD 几乎一致
words = lines.flatMap(lambda line: line.split(" "))
pairs = words.map(lambda word: (word, 1))
wordCounts = pairs.reduceByKey(lambda x, y: x + y)

# 4. 输出操作 (Output Operations)
# 打印每个批次的前 10 个元素
wordCounts.pprint()

# 5. 启动与等待
ssc.start()             # 启动流计算
ssc.awaitTermination()  # 等待手动停止

运行结果:

------------------------------------------
Time: 2024-01-01 10:00:01
-------------------------------------------
(hello, 1)
(spark, 1)

阅读全文

注册 立即解锁全文并访问全部文章: 网站会员, 海外DE会员 and 成为小万的高级会员 tiers 专享.

订阅
已有账号? 登录

小万和大树知识成长营地

注册成功!

欢迎回来,已成功登录。

你已成功订阅 小万和大树知识成长营地。

成功!请查收登录邮件。

成功!账单信息已更新。

账单信息未更新。