`

Apache Spark之 reduceByKey() 函数

阅读更多
一、背景知识

    RDD : Resilient Distributed DataSet

           回弹性 分布式  数据集合


          什么是 Resilient /rɪˈzɪliənt/ ? 英文解释是这样的:

          able to recoil or spring back into shape after bending, stretching,
          or being compressed.(
          其形状能够在弯曲、拉伸、被压缩后 恢复回原来的模样)

     那么 Resilient
     应用到 RDD 中是什么意思?这需要引入 RDD 操作的另一个概念:Map。
     Map 是什么? Java 中有 HashMap 集合类(使用Hash算法实现的Map)
     HashMap 的对象是 (Key, Value) 格式的。即:一个键 映射 一个值。

     这里的 Map 也是这个意思:映射。把一个 RDD 映射为 一个新的 RDD,
     通过某种映射规则(函数)。 RDD 映射完成后,还可以恢复到映射前的样子。

    

二、reduceByKey() 函数

在 Apache Spark 的 Quick Start 页面 有这么一行代码,是关于 MapReduce 的概念及用法的。
//
//该行代码用来统计 ReadMe.md 文件中,每个单词出现的次数。
//

scala> val textFile = sc.textFile("README.md")

scala> val wordCounts = textFile
                        .flatMap(line => line.split(" "))
                        .map(word => (word, 1))
                        .reduceByKey((a, b) => a + b)


scala> wordCounts.collect()
//res6: Array[(String, Int)] = Array((means,1), (under,2), (this,3), 
//                       (Because,1), (Python,2), (agree,1), (cluster.,1), ...)
//
//


其中有这么一个函数: reduceByKey((a, b) => a + b)

经过查看 API,现记录如下:

________________________________________________________________________________

- reduceByKey(func, [numTasks])
________________________________________________________________________________

    When called on a dataset of (K, V) pairs,
    returns a dataset of (K, V) pairs where the values for each key
    are aggregated using the given reduce function func, which must
    be of type (V,V) => V.

    Like in groupByKey, the number of reduce tasks is configurable
    through an optional second argument.

------------------------------------------------------------------------------
解释:

    reduceByKey 函数应用于(Key,Value)格式的数据集。
    reduceByKey 函数的作用是把 key 相同的合并。
    reduceByKey 函数同样返回一个(Key,Value)格式的数据集。

    reduceByKey 函数的参数 func 的格式:(V,V) => V.
    即:两个 value 作为参数;必须返回一个 Value 格式的数据。

________________________________________________________________________________


故:reduceByKey((a, b) => a + b) 的完整写法应该是这样的(大概意思):
function reduceByKey( function(value_a, value_b){
    return value_a + value_b;
});




最后:


关于 Lambda 表达式,请参看我的这篇技术博文:

Java 8 之新特性介绍 及 Lambda 表达式







引用:

Apache Spark - Quick Start
http://spark.apache.org/docs/latest/quick-start.html


Apache Spark - Programming Guid: Transformations
http://spark.apache.org/docs/latest/programming-guide.html#transformations





-
转载请注明,
原文出处:http://lixh1986.iteye.com/blog/2345420






-


分享到:
评论

相关推荐

    Apache Spark源码走读之3 -- Task运行期之函数调用关系分析

    ### Apache Spark源码走读之3 -- Task运行期之函数调用关系分析 #### 概述 Apache Spark作为一款高效的大数据处理框架,在其内部有着复杂的任务调度与执行机制。本文将深入探讨Spark中Task执行期间的具体流程以及...

    福建师范大学精品大数据导论课程系列 (6.7.1)--5.2 ApacheSpark之三.pdf

    在Java、Scala和Python中,都通过textFile方法读取数据,使用flatMap、mapToPair和reduceByKey等函数进行数据转换和聚合,最后将结果保存到文件系统。 - DataFrame API是Spark SQL的一部分,它提供了类似于SQL的...

    Apache Spark常见面试题

    例如,`map`、`filter`、`reduceByKey`等都是典型的Transformation算子,它们不会立即执行,而是在触发Action操作时才会被执行。 - **其他代码**:除了Transformation算子之外,大部分代码(如变量定义、函数声明等...

    使用Apache Spark来处理一个简单的文本数据集

    在Spark中,我们还可以利用DataFrame和Dataset的转换操作,比如`map()`、`flatMap()`和`reduceByKey()`,对数据进行进一步处理。同时,Spark SQL支持将DataFrame注册为临时表,然后使用SQL查询语言进行查询,这对于...

    spark期末复习题总结

    "Spark期末复习题总结" ...10. Spark中的reduceByKey操作是一个action操作,例如val key = Array(1, 2); val value = Array("one","two"); val m = key.zip(value).toMap返回结果为m(1) 等于 "one"。

    Spark常用的算子以及Scala函数总结.pdf

    6. reduceByKey(func): 对每个键对应的值进行函数 func 的合并操作,结果以键值对的形式返回。 7. groupByKey(numPartitions): 把相同键的值聚合成一个集合,结果为键和值的集合的集合。 8. sortByKey(ascending, ...

    Spark python API 函数调用学习

    4. **转换(Transformations)**:RDD、DataFrame和Dataset可以进行一系列转换,如`map()`, `filter()`, `flatMap()`, `groupByKey()`, `reduceByKey()`, `join()`, `distinct()`等。这些转换定义了数据处理逻辑,但...

    Spark算子实例maven版

    3. **reduceByKey()**: 在键值对的RDD上操作,将具有相同键的所有值聚合在一起,使用用户定义的合并函数。这在处理分组数据时非常有用,例如计算每个类别下的总和或平均值。 4. **join()**: 将两个或多个RDD按照...

    WordCount_Spark!_spark_wordcount_java_

    - **聚合数据**:使用`reduceByKey()`函数对键值对进行聚合,将相同单词的计数累加。 - **输出结果**:最后,使用`collect()`方法将结果收集到本地并打印。 **3. 关键API详解** - `flatMap()`: 将每个输入元素...

    spring-spark-word-count:使用Spring Boot的Apache Spark的经典字数计算示例

    3. 计算词频:使用`map()`函数对每个单词生成键值对(word, 1),然后通过`reduceByKey()`函数进行聚合,实现相同单词的计数。 4. 结果输出:最后,使用`collect()`或`saveAsTextFile()`方法将结果收集或保存到指定...

    Spark的TopN示例

    在Spark中,可以使用`reduceByKey`和`takeOrdered`函数组合来实现。`reduceByKey`将相同键的数据聚合在一起,计算每个键的值(如出现次数),然后`takeOrdered`根据值进行排序并取前N个。 ```scala val topN = data...

    大数据技术原理及应用课实验7 :Spark初级编程实践

    在Spark中,可以使用`reduceByKey`或`distinct`操作来实现。首先,将两个文件的内容合并为一个DataFrame或RDD,然后通过`reduceByKey(_ + _)`对键值对进行合并,最后用`distinct()`去除重复项。 2. 求平均值:这个...

    spark rdd 论文翻译_中文_spark老汤

    转换操作如`map`、`filter`和`reduceByKey`,它们不会立即执行,而是创建一个新的RDD。而动作如`count`、`collect`和`save`则会触发实际的计算,并返回结果或者将数据写入持久化存储。这种延迟计算(lazy evaluation...

    spark的样例代码

    3. 处理数据:`counts = lines.rdd.flatMap(lambda line: line.split()).map(lambda word: (word, 1)).reduceByKey(lambda a, b: a + b)` 4. 显示结果:`counts.collect()` 以上只是基本操作的概述,实际的样例代码...

    【大数据学习资料】Spark单value,key-value类型21个算子(图解与源码).zip

    4. **reduceByKey**:对key-value对执行reduce操作,相同key的值会被聚合。 5. **groupByKey**:将具有相同key的元素分组,返回一个键值对RDD,其中键对应于原始键,值是一个包含该键所有原始值的迭代器。 6. **...

    spark-dstream-http:用于 HTTP 的 Apache Spark DStream

    5. **数据处理**:对DStream应用转换操作,例如map、filter、reduceByKey等,进行数据清洗和分析。 6. **输出结果**:将处理后的数据写入持久化存储,如HDFS、数据库,或者使用foreachRDD直接输出到控制台或其他系统...

    Java实现Spark词配对Wordcount计数代码实现

    Spark提供了`pairWithSingleton()`方法,将每个单词映射到1,然后使用`reduceByKey()`来计算每个单词的出现次数: ```java JavaPairRDD, Integer> wordCounts = words.mapToPair(word -> new Tuple2(word, 1)) ....

    03_SparkRDD(RDD编程实战)

    然后,通过`reduceByKey`对所有("pv", 1)元组按键聚合,累加每个键对应的值,最后收集并打印结果。 2. 计算独立访客量(UV) 这个案例与PV计算类似,但关注的是独立访客。我们首先同样创建Spark配置和上下文,然后...

Global site tag (gtag.js) - Google Analytics