关于火花流的变换功能的困惑

Posted

技术标签:

【中文标题】关于火花流的变换功能的困惑【英文标题】:Confusion about spark streaming's transform function 【发布时间】:2016-09-17 08:57:44 【问题描述】:

我对 DStream 的转换功能有点困惑。例如,如果我有以下情况。

val statusesSorted = statuses.transform(rdd => rdd.sortByKey())

整个 DStream 是按键排序,还是 DStream 中的单个 RDD 单独排序。如果确实如此,我该如何对整个 DStream 的键进行排序。

【问题讨论】:

应该如何对整个 Stream 进行排序?你不知道接下来会出现什么元素...... 我的意思是,例如,当您使用 reduceByKeyAndWindow 时,您还指定了窗口大小。是否可以对整个窗口进行排序? 【参考方案1】:

Spark 中的transform 函数允许您对 DStream 中的RDDs 执行任何 Spark 转换。

map 转换执行类似的操作,但基于元素到元素,而 dstream 上的transform 操作允许您对完整的 RDD 进行转换。

为了回答您的问题,

整个 DStream 是按键排序还是里面的单个 RDD 排序 DStream 将单独排序。

它将对您的 dstream 中的各个 RDD 进行排序。

如果确实如此,我该如何对整个 DStream 的键进行排序。

要回答这个问题,请了解 Spark 一次处理一个批次,并且批次中的记录对应于 RDD。因此,对一批记录(即一个 RDD)进行排序是有意义的,因为它们形成了用于计算的数据。对 dstream 进行排序是不合逻辑的。

【讨论】:

OK,但是当你使用reduceByKeyAndWindow时,你还要指定窗口大小。例如,您可以在 1 秒时进行流式传输,但窗口是 60 秒。是否可以在 60 秒的窗口中对数据进行排序。我想使用这样的功能,例如,我想列出一个窗口的最高计数。 好的,明白了,在reduceByKeyAndWindow的情况下,一个RDD就变成了一个数据间隔为60秒的RDD。 是的,这将是您的窗口操作的输出。

以上是关于关于火花流的变换功能的困惑的主要内容,如果未能解决你的问题,请参考以下文章

无法使用火花结构化流计算文档

火花流功能火花提交时间通过异常

火花。将 RDD 拆分为批次

文件压缩格式如何影响我的火花处理

火花数据框爆炸功能错误

分区上的火花scala数据框功能