Spark结构化流编程指南【基础信息】

Spark结构化流提供了一种可伸缩、容错的流处理方式,将流数据视为动态更新的表。用户可以使用DataFrame/Dataset API进行流计算,支持事件时间窗口、流批处理联接等操作。默认采用微批量处理,但自Spark 2.3引入了低延迟的连续处理模式。程序示例展示了如何创建和启动流处理,包括设置输出模式、启动Socket数据源。结构化流通过检查点和预写日志确保端到端的一次性语义,简化了容错和数据一致性管理。
摘要由CSDN通过智能技术生成

一.概述

结构化流是基于Spark SQL引擎构建的可伸缩且容错的流处理引擎。可以像对静态数据进行批处理计算一样来表示流计算。当流数据继续到达时,Spark SQL引擎将负责逐步递增地运行它并更新最终结果。可以在Scala,Java,Python或R中使用Dataset / DataFrame API来表示流聚合,事件时间窗口,流到批处理联接等。计算在同一优化的Spark SQL引擎上执行。最后,系统通过检查点和预写日志来确保端到端的一次容错保证。简而言之,结构化流提供了快速,可扩展,容错,端到端的精确一次流处理,而用户无需推理流。

在内部,默认情况下,结构化流查询是使用微批量处理引擎处理的,该引擎将数据流作为一系列小批量作业处理,从而实现了低至100毫秒的端到端延迟以及一次精确的容错保证。但是,自Spark 2.3起,我们引入了一种称为“ 连续处理”的新低延迟处理模式,该模式可以实现一次最少保证的低至1毫秒的端到端延迟。在不更改查询中的Dataset / DataFrame操作的情况下,将能够根据应用程序需求选择模式。

二.快速案例

1.获取SparkSession入口并导入转换

    val spark = SparkSession
      .builder()
      .appName("从Socket获取数据进行结构化处理")
      .master("local[2]")
      .getOrCreate()

    // 导入转换
    import spark.implicits._

2.创建流处理框架

    // split the lines into words
    val wordCounts = lines.as[String]
      .flatMap(_.split(" "))
      .groupBy("value")
      .count()

此linesDataFrame表示一个包含流文本数据的无界表。该表包含一列名为“值”的字符串,流文本数据中的每一行都成为表中的一行。请注意,由于我们正在设置转换,并且尚未开始转换,因此当前未接收到任何数据。接下来,我们使用将该DataFrame转换为String的Dataset .as[String],以便我们可以应用该flatMap操作将每一行拆分为多个单词。最后,我们wordCounts通过对数据集中的唯一值进行分组并对其进行计数来定义DataFrame。请注意,这是一个流数据帧,它表示流的运行字数。
3.开启执行
设置outputMode(“complete”)为在每次更新计数时将完整的计数集(由指定)打印到控制台。然后使用开始流计算start()。

    // start running program
    val result = wordCounts
      .writeStream
      .outputMode("complete")
      .format("console")
      .start()
    
    result.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值