我一直在尝试在线查找材料 - 两者都是基于微批次的 - 所以有什么区别?
答案 0 :(得分:3)
在Spark 2.2之前,DStream[T]
是流数据的抽象数据类型,可以被视为RDD[RDD[T]]
。从Spark 2.2开始,DataSet
是{{1}的抽象。它既包含批处理(冷),也包含流数据。
来自文档
Discretized Streams(DStreams)Discretized Stream或DStream就是 Spark Streaming提供的基本抽象。它代表了一个 连续的数据流,或者是从中接收的输入数据流 源,或通过转换生成的已处理数据流 输入流。在内部,DStream由连续表示 一系列RDD,这是Spark对不可变的抽象, 分布式数据集(有关详细信息,请参阅Spark编程指南)。 DStream中的每个RDD包含来自特定间隔的数据,如图所示 在下图中。
API使用数据集和DataFrames自Spark 2.0,DataFrames和 数据集可以表示静态,有界数据以及流式传输, 无限数据。与静态数据集/数据框类似,您可以使用 常见的入口点SparkSession(Scala / Java / Python / R docs)来创建 从流媒体源流式传输DataFrames / Datasets,并应用 与静态DataFrames / Datasets相同的操作。如果你不是 熟悉数据集/数据框架,强烈建议您使用 使用DataFrame / Dataset Programming熟悉它们 指南。
答案 1 :(得分:0)
有关Spark Streaming(RDD / DStream)和Spark结构化Streaming(Dataset / DataFrame)的简要说明
火花流基于 DStream 。 DStream由一系列连续的RDD表示,这是Spark对不变的分布式数据集的抽象。 Spark Streaming存在以下问题。
困难-构建支持交付策略的流传输管道并不容易:只需保证一次,就可以处理迟到或容错的数据到达。当然,它们都是可以实现的,但是它们需要程序员的一些额外工作。
不相容-用于生成批处理(RDD,数据集)的API与流处理(DStream)的API不同。当然,没有什么可阻止代码编写的,但是至少处理抽象总是比较简单的(尤其是维护成本)。
请参见example
火花结构化流应理解为无限制的表,随着新的传入数据而增长,即可以认为是基于Spark SQL构建的流处理。
更具体地说,结构化流媒体为Spark带来了一些新概念。
完全一次保证-结构化的流媒体专注于该概念。这意味着数据仅处理一次,并且输出不包含重复项。
事件时间-DStream流的一个观察到的问题是处理顺序,即较早生成的数据在较晚生成的数据之后进行处理的情况。结构化流处理使用称为事件时间的概念来处理此问题,在某些情况下,事件时间允许在处理管道中正确地聚合后期数据。sink,结果表,输出模式和水印是spark结构化流的其他功能。
请参见example
火花结构化流流程图:-