Python版Spark Structured Streaming编程指南

Structured Streaming中文参考指南

一、概述

Structured Streaming是构建在Spark SQL引擎之上的可扩展且容错的流处理引擎。用户可以像处理静态数据的批处理计算一样表达流计算,Spark SQL引擎会持续增量地运行计算,并在流数据不断到达时更新最终结果。用户可以使用Scala、Java、Python或R中的Dataset/DataFrame API来表达流聚合、事件时间窗口、流到批处理的连接等操作,计算在优化的Spark SQL引擎上执行,系统通过检查点和预写日志确保端到端的精确一次容错保证。

内部默认情况下,Structured Streaming查询使用微批处理引擎处理,将数据流作为一系列小批量作业处理,实现低至100毫秒的端到端延迟和精确一次容错保证。从Spark 2.3开始,引入了新的低延迟处理模式——连续处理模式,可实现低至1毫秒的端到端延迟和至少一次保证,用户可根据应用需求选择模式。

二、快速示例

以维护从监听TCP套接字的数据服务器接收的文本数据的实时单词计数为例,展示如何使用Structured Streaming实现。

  1. 导入必要的类并创建本地SparkSession
    • 在Python中,使用如下代码:
from pyspark.sql import SparkSession
from pyspark.sql.functions import explode, split

spark = SparkSession \
  .builder \
  .appName("StructuredNetworkWordCount") \
  .getOrCreate()
  1. 创建表示从服务器接收的文本数据流的DataFrame并进行转换计算单词计数
    • 创建监听本地9999端口的DataFrame:
lines = spark \
  .readStream \
  .format("socket") \
  .option("host", "localhost") \
  .option("port", 9999) \
  .load()
  • 将每行文本拆分为单词:
words = lines.select(
   explode(
       split(lines.value, " ")
   ).alias("word"))
  • 计算每个单词的出现次数:
wordCounts = words.groupBy("word").count()
  1. 启动流式查询并将结果输出到控制台
query = wordCounts \
  .writeStream \
  .outputMode("complete") \
  .format("console") \
  .start()
query.awaitTermination()

执行代码后,启动Netcat作为数据服务器(nc -lk 9999),在另一个终端运行示例代码,在Netcat终端输入的文本会被实时计数并每秒在屏幕上打印结果。

三、编程模型

  1. 基本概念
    • 将实时数据流视为不断追加的表,对流的查询生成“结果表”。每经过一个触发间隔(如每秒),新数据作为新行追加到输入表,进而更新结果表,结果表更新时将变化的结果行写入外部存储(输出)。输出模式有:
      • Comple
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值