在sparkstreaming中对窗口范围进行reduce主要有下面四个方法, 其他方法都是直接或者间接调用下面的方法来获取结果
在这之前, 最好了解我之前一篇博客内容:
http://humingminghz.iteye.com/blog/2308138
对非(K,V)形式的RDD 窗口化reduce:
1.reduceByWindow(reduceFunc, windowDuration, slideDuration)
2.reduceByWindow(reduceFunc, invReduceFunc, windowDuration, slideDuration)
对(K,V)形式RDD 按Key窗口化reduce:
1.reduceByKeyAndWindow(reduceFunc, windowDuration, slideDuration)
2.reduceByKeyAndWindow(reduceFunc, invReduceFunc, windowDuration, slideDuration, numPartitions, filterFunc)
从方法上面来看, 理解和使用#1的方法确实非常简单, 但是在大数据计算过程中, 我们还是应该把效率放到第一位, 如果简单的看一下源码, 或许可以明白为什么我们应该在允许的情况下尽量用#2的方法。
reduceByWindow(reduceFunc, windowDuration, slideDuration) 代码:
可以看到他做了两次reduce, 第一次对整个self做一次reduce, 然后截取时间区间, 对结果再做一次reduce。
第一点: 对整个self做reduce会比较慢, 因为self都是相对比较大的集合。
第二点:进行了两次reduce
def reduceByWindow(
reduceFunc: (T, T) => T,
windowDuration: Duration,
slideDuration: Duration
): DStream[T] = ssc.withScope {
this.reduce(reduceFunc).window(windowDuration, slideDuration).reduce(reduceFunc)
}
如果我们看:
reduceByWindow(reduceFunc, invReduceFunc, windowDuration, slideDuration)
实际上他是调用了效率非常高的reduceByKeyAndWindow(reduceFunc, invReduceFunc, windowDuration, slideDuration, numPartitions, filterFunc) 方法 ==》 详细计算过程参考之前的博文
这样的话其实他只对newRDDs和oldRDDs做reduce, 由于这两个RDDs都非常小, 可以想象效率是非常高的
def reduceByWindow(
reduceFunc: (T, T) => T,
invReduceFunc: (T, T) => T,
windowDuration: Duration,
slideDuration: Duration
): DStream[T] = ssc.withScope {
this.map(x => (1, x))
.reduceByKeyAndWindow(reduceFunc, invReduceFunc, windowDuration, slideDuration, 1)
.map(_._2)
}
如果看reduceByKeyAndWindow的话, 情况也是一样, 一个是执行:
self.reduceByKey(reduceFunc, partitioner)
.window(windowDuration, slideDuration)
.reduceByKey(reduceFunc, partitioner)
而另外一个确是在已有的window值基础上做了简单的加加减减
宗上, 从效率上面考虑, 我们应该尽量使用包含invReduceFunc的方法, 同样情况下摒弃只有reduceFunc的方法
分享到:
相关推荐
在配置Spark Streaming时,需要将Spark版本设置为1.3.0,并且需要配置Spark Streaming的参数,包括batch interval、window duration等。 三、Kafka和Spark Streaming集成 在将Kafka和Spark Streaming集成时,需要...
方法说明:countByWindow(windowLength, slideInterval)reduceByWindow(func, windowLength, slideInterval)reduceByKeyAndWindow(func, invFunc, windowLength, slideInterval, [numTasks])countByValueAndWindow...
用户可以从多种数据源(比如Kafka、Flume、Kinesis或者TCP套接字)获取数据,并通过高级函数接口(如`map`、`reduce`、`join`和`window`)对数据进行复杂的算法处理和实时仪表盘展示。处理后的数据可以被推送至文件...
- **日志解析**:在 Spark Streaming 中,我们需要先读取这些日志文件,然后通过正则表达式或其他解析方法提取有意义的信息。 - **日志过滤**:实验可能涉及根据特定关键词或模式过滤日志,例如只保留包含特定错误...
与传统的批处理不同,Spark Streaming 能够接收来自多种数据源的实时数据流,并通过一系列高级操作(如 map、reduce、join 和 window 等)对这些数据进行实时处理。 **特点**: 1. **高吞吐量**:能够处理大规模的...
SparkStreaming之Dstream入门 Spark Streaming是Apache Spark中的一个组件,用于处理流式数据。它可以从多种数据源中接收数据,如Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等,并使用Spark的高度抽象原语如...
### Spark Streaming原理与实践 #### 一、为什么需要流处理? 传统的批处理框架如MapReduce在处理实时数据流时存在一些局限性,主要是因为每次处理一批数据就需要启动一个新任务,而任务的启动过程(包括输入切分...
4. 数据处理:在Spark Streaming应用中,对DStream进行操作,如map、reduce、window等,进行实时的数据分析和处理。 5. 启动Flume和Spark Streaming:启动Flume服务,使其开始收集和推送数据,同时启动Spark ...
相比于传统的批处理技术,Spark Streaming提供了对实时数据流的支持,使得开发者能够在大数据环境中实现高效的数据处理任务。 #### 二、核心概念:DStream **DStream (Discretized Stream)** 是Spark Streaming中...
总的来说,《Spark Streaming Systems》是理解Spark Streaming原理和实践的宝贵资源,无论你是初学者还是有经验的开发者,都能从中获得对实时数据处理深入的理解,并学会如何利用Spark Streaming构建高性能的流处理...
### Spark Streaming 原理详解 #### 1. Spark Streaming 简介 ...通过对 Spark Streaming 的核心概念、架构设计、编程模型以及性能优化策略的深入理解,可以帮助开发者更好地构建高效、可靠的实时数据处理系统。
SparkStreaming 的基本工作原理是将实时数据流分割成多个时间窗口(micro-batches),然后使用 Spark Core 的并行和分布式处理能力对每个批次进行计算。这种方式既保留了 Spark 的内存计算优势,也实现了对实时数据...
Spark Streaming 支持多种数据输入源,如 Kafka、Flume、Twitter、ZeroMQ 和基于 TCP 的套接字,允许数据流入后使用 Spark 的核心操作,如 map、reduce、join 和 window 进行处理。处理结果可以存储在多种系统中,...
6. **有状态的流式处理:** Spark Streaming支持有状态的操作,例如通过`updateStateByKey`方法来维护任意状态信息,使得即使在流式数据中也能进行复杂的状态管理和计算。 7. **Window-Based Transformation:** 在...
Spark Streaming是Apache Spark的一个模块,专门用于处理实时数据流。...在学习和实践中,理解滑动窗口的工作原理并掌握其配置方法,将对提升Spark Streaming应用程序的效率和准确性起到关键作用。
当你使用Java或Scala编写Spark应用程序时,通常会在`main`方法中创建一个`SparkContext`实例。如果是在Spark Shell中开发,则`SparkContext`会被自动创建,并可以通过预定义的变量`sc`访问。 #### Executor 在Spark...
Spark Streaming 是 Apache Spark 的一个模块,专门用于实时数据流处理。它是 Spark 核心 API 的扩展,设计上遵循了 Spark 的简洁、易用和高性能的特点。Spark Streaming 支持高吞吐量和容错能力,使得它能够在...
### Structured Spark Streaming as a Service with Hopsworks Structured Spark Streaming as a Service with Hopsworks is a powerful and flexible solution designed to simplify the process of building real...