美文网首页sparkspark
Spark Pair RDD基本操作

Spark Pair RDD基本操作

作者: LuciferTM | 来源:发表于2016-04-07 18:23 被阅读2201次

Pair RDD基本操作

虽然大部分Spark的RDD操作都支持所有种类的对象,但是有少部分特殊的操作只能作用于键值对类型的RDD。这类操作中最常见的就是分布的shuffle操作,比如将元素通过键来分组或聚集计算。在Python中,这类操作一般都会使用Python内建的元组类型,比如(1, 2)。生成的键值对的RDD称为PairRDD。

创建Pair RDD

有很多种创建键值对的方式,很多存储键值对的数据格式会在读取时直接返回由其键值对组成的pair RDD。此外当需要将一个普通的RDD转化为一个pair RDD时可以使用map函数来进行操作。

Paste_Image.png

Pair RDD的转化操作

Pair RDD可以使用所有标准RDD上的可用的转化操作。由于pair RDD包含的是二元组,所以需要传递的函数应当操作二元组而不是独立的元素。当然如果传递的函数不是操作二元组的话,有异常报出。

Paste_Image.png

标准转化操作示例:

Paste_Image.png

Pair RDD有一些特有的转化操作如下:

Paste_Image.png

!注意其中对Values进行操作接口所传递的函数参数是rdd中元组的值。
针对两个pair RDD的转化操作:

Paste_Image.png

聚合操作—combineByKey

当数据集以键值对形式组织的时候,聚合具有相同键的元素进行一些统计是很常见的操作。对于Pair RDD常见的聚合操作如:reduceByKey,foldByKey,groupByKey,combineByKey。这里重点要说的是combineByKey。

在数据分析中,处理Key,Value的Pair数据是极为常见的场景,例如我们可以针对这样的数据进行分组、聚合或者将两个包含Pair数据的RDD根据key进行join。从函数的抽象层面看,这些操作具有共同的特征,都是将类型为RDD[(K,V)]的数据处理为RDD[(K,C)]。这里的V和C可以是相同类型,也可以是不同类型。这种数据处理操作并非单纯的对Pair的value进行map,而是针对不同的key值对原有的value进行联合(Combine)。因而,不仅类型可能不同,元素个数也可能不同。

combineByKey函数主要接受了三个函数作为参数,分别为createCombiner、mergeValue、mergeCombiners。这三个函数足以说明它究竟做了什么。理解了这三个函数,就可以很好地理解combineByKey。

要理解combineByKey(),要先理解它在处理数据时是如何处理每个元素的。由于combineByKey()会遍历分区中的所有元素,因此每个元素的键要么还没有遇到过,要么就和之前的键相同。combineByKey()的处理流程如下:

如果是一个新的元素,此时使用createCombiner()来创建那个键对应的累加器的初始值。(!注意:这个过程会在每个分区第一次出现各个键时发生,而不是在整个RDD中第一次出现一个键时发生。)

如果这是一个在处理当前分区中之前已经遇到键,此时combineByKey()使用mergeValue()将该键的累加器对应的当前值与这个新值进行合并。

3.由于每个分区都是独立处理的,因此对于同一个键可以有多个累加器。如果有两个或者更多的分区都有对应同一个键的累加器,就需要使用用户提供的mergeCombiners()将各个分区的结果进行合并。

示例:

Paste_Image.png

相关文章

  • Spark Pair RDD基本操作

    Pair RDD基本操作 虽然大部分Spark的RDD操作都支持所有种类的对象,但是有少部分特殊的操作只能作用于键...

  • 第四章 键值对操作

    4.1 动机 Spark为包含键值对类型的RDD提供了一些专有的操作——pair RDD。pair RDD是很多程...

  • SparkRDD的键值对操作

    pairRDD Spark 为包含键值对类型的 RDD 提供了一些专有的操作。这些 RDD 被称为pair RDD...

  • RDD详解

    RDD基本操作(引用) 1、RDD是什么 RDD:Spark的核心概念是RDD (resilientdistrib...

  • 6.spark core之键值对操作

      键值对RDD(pair RDD)是spark中许多操作所需要的常见数据类型,通常用来进行聚合计算。 创建Pai...

  • Spark RDD Api使用指南

    ​ 在Spark快速入门-RDD文章中学了spark的RDD。spark包含转换和行动操作。在进行spark程...

  • 3.Spark学习(Python版本):Spark RDD编程基

    Spark中针对RDD的操作包括创建RDD、RDD转换操作和RDD行动操作。 Step1. 启动HDFS和Spar...

  • Spark API - RDD

    转摘地址: Spark笔记:RDD基本操作(上) RDD本质就是一个数组,因此构造数据时候使用的是List(链表)...

  • RDD操作—— 键值对RDD(Pair RDD)

    键值对概述 “键值对”是一种比较常见的RDD元素类型,分组和聚合操作中经常会用到。Spark操作中经常会用到“键值...

  • Spark核心编程:Spark基本工作原理与RDD

    Spark核心编程:Spark基本工作原理与RDD Spark基本工作原理 画图讲解Spark的基本工作原理1、分...

网友评论

本文标题:Spark Pair RDD基本操作

本文链接:https://www.haomeiwen.com/subject/vjtvlttx.html