sparkstreaming下的第一个word count程序(python版)

本文介绍如何使用Spark Streaming从指定端口读取实时数据流,并实现每秒更新的单词频率统计。通过Python编写代码,创建本地StreamingContext,设置批处理间隔为1秒,连接至localhost:9999接收数据,对数据流进行切分、映射及reduceByKey操作,最终打印每批数据前十个元素的统计结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先从socket中读取数据,然后通过sparkstreaming统计输入的单词个数

1.通过下面命令开启端口(报错则需安装 nc)

nc -lk 9999

2.编写sparkstreaming.py代码

from pyspark import SparkContext
from pyspark.streaming import StreamingContext

# Create a local StreamingContext with two working thread and batch interval of 1 second
#至少需要2个核,因为需要有一个核用于读取数据
sc = SparkContext("local[2]", "NetworkWordCount")
#间隔一秒读取一次数据流
ssc = StreamingContext(sc, 1)


# Create a DStream that will connect to hostname:port, like localhost:9999
lines = ssc.socketTextStream("localhost", 9999)

# Split each line into words
words = lines.flatMap(lambda line: line.split(" "))

# Count each word in each batch
pairs = words.map(lambda word: (word, 1))
wordCounts = pairs.reduceByKey(lambda x, y: x + y)

# Print the first ten elements of each RDD generated in this DStream to the console
wordCounts.pprint()

ssc.start()             # Start the computation
ssc.awaitTermination()  # Wait for the computation to terminate

该段代码的作用是,每隔1s时间,从9999端口读取该时间段内输入的数据,并统计读取到的数据的word count。

3.spark-submit --master local sparkstreaming.py运行上述代码。

   当在步骤1的窗口中输入数据,则在运行spark的窗口可以看到统计结果。

### Spark Streaming 基础概念 Spark Streaming 是 Apache Spark 的扩展模块之一,用于处理大规模实时数据流。该技术的核心理念在于将输入的数据流分割成短小的时间片段(通常几秒),并对这些片段中的数据执行批量处理操作[^2]。 #### DStream 抽象 在 Spark Streaming 中,主要的抽象是 **DStream** (Discretized Stream),即离散化的流。DStream 表示连续不断到达的数据序列,内部由一系列 RDD 组成,每个 RDD 对应于特定时间段内收集到的一批数据项集合[^3]。 当应用程序定义好逻辑之后,Spark Streaming 将自动把整个流程划分为若干个小批次的任务来运行,在每一个固定间隔周期里重复相同的转换过程直到程序终止为止。 ### Socket 流集成实例 为了展示如何利用 Spark Streaming 来消费来自网络套接字的服务端口上的文本消息,下面给出一段 Python 代码作为示范: ```python from pyspark import SparkConf, SparkContext from pyspark.streaming import StreamingContext conf = SparkConf().setMaster("local[*]").setAppName("SocketWordCount") sc = SparkContext(conf=conf) ssc = StreamingContext(sc, batchDuration=2) # 创建一个每两秒钟划分一批次的新 SSC lines = ssc.socketTextStream("localhost", 9999) # 从本地主机监听指定端口号获取字符串形式的日志记录 words = lines.flatMap(lambda line: line.split()) # 拆分成单个词语列表 pairs = words.map(lambda word: (word, 1)) # 映射为键值对(word, count) counts = pairs.reduceByKey(lambda a, b: a + b) # 计算各词频统计结果 counts.pprint() # 打印输出前几个元素供查看 ssc.start() ssc.awaitTermination() ``` 这段脚本启动了一个简单的服务器,它会等待客户端连接并通过 TCP 发送过来的内容来进行逐行解析;接着按照空格符切分每一行成为单词数组,并进一步映射至 `(key,value)` 形式的元组以便后续聚合运算;最后通过 `reduceByKey` 函数实现频率汇总并打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值