`

Spark基础-parallelize函数和makeRDD函数的区别

 
阅读更多

Spark提供了两种创建RDD的方式:读取外部数据集,以及在驱动器程序中对一个集合进行并行化。

在驱动器程序中对一个集合进行并行化的方式有两种:parallelize()和makeRDD()。

1、parallelize()

def parallelize[T: ClassTag](
      seq: Seq[T],
      numSlices: Int = defaultParallelism): RDD[T] = withScope {
    assertNotStopped()
    new ParallelCollectionRDD[T](this, seq, numSlices, Map[Int, Seq[String]]())
  }

2、makeRDD(),有两种重构方法,如下:

2.1、方法一:

/** Distribute a local Scala collection to form an RDD.
   *
   * This method is identical to `parallelize`.
   */
  def makeRDD[T: ClassTag](
      seq: Seq[T],
      numSlices: Int = defaultParallelism): RDD[T] = withScope {
    parallelize(seq, numSlices)
  }

 可以发现,该重构方法的实现就是调用parallelize()方法。

2.2、方法二:

/**
   * Distribute a local Scala collection to form an RDD, with one or more
   * location preferences (hostnames of Spark nodes) for each object.
   * Create a new partition for each collection item.
   */
  def makeRDD[T: ClassTag](seq: Seq[(T, Seq[String])]): RDD[T] = withScope {
    assertNotStopped()
    val indexToPrefs = seq.zipWithIndex.map(t => (t._2, t._1._2)).toMap
    new ParallelCollectionRDD[T](this, seq.map(_._1), math.max(seq.size, 1), indexToPrefs)
  }

注释的意思为:分配一个本地Scala集合形成一个RDD,为每个集合对象创建一个最佳分区。

 

给出如下例子,可以更清晰的看到它们之间的区别:

首先定义集合对象:

val seq = List(("American Person", List("Tom", "Jim")), ("China Person", List("LiLei", "HanMeiMei")), ("Color Type", List("Red", "Blue")))

使用parallelize()创建RDD:

val rdd1 = sc.parallelize(seq)

查询rdd1的分区数:

rdd1.partitions.size  // 2

使用makeRDD()创建RDD

val rdd2 = sc.makeRDD(seq)

查看rdd2的分区数

rdd2.partitions.size  // 3

 

想想为什么会是这样的结果?

当调用parallelize()方法的时候,不指定分区数的时候,使用系统给出的分区数,而调用makeRDD()方法的时候,会为每个集合对象创建最佳分区,而这对后续的调用优化很有帮助。

1
1
分享到:
评论

相关推荐

    Spark学习--RDD编码

    当Spark对数据操作和转换时,会自动将RDD中的数据分发到集群,并将操作并行化执行。 Spark中的RDD是一个不可变的分布式对象集合。每个RDD都倍分为多个分区,这些分区运行在集群中的不同节点。RDD可以包含Python、...

    spark-tut-2016-intro.pdf

    根据提供的文件信息,我们可以深入探讨Hadoop与Spark的相关知识点,特别是Spark框架的特性和优势。 ### Spark概述 Spark是一款用于执行分布式计算的框架,它具备高度可扩展性,能够处理TB级别的数据。Spark提供了...

    spark-python-knn:Apache Spark中用于计算K-NN的函数

    Spark Python K-nn 简单但具有存储效率的函数,用于计算K个最近的邻居。需要安装Numpy,scikit-learn。安装将jakac:spark-python-knn:0.0.3添加到您的应用程序要求中: $SPARK_HOME/bin/pyspark --packages jakac:...

    spark-windows helloword入门例子

    Spark是Apache软件基金会下的一个开源大数据处理框架,它在分布式计算领域有着广泛的应用。...通过阅读和实践这些内容,你可以更深入地理解Spark的工作原理和应用方式,为日后的数据分析和处理项目打下坚实基础。

    《Spark编程基础及项目实践》课后习题及答案4.pdf

    《Spark编程基础及项目实践》课后习题与答案涵盖了Spark的核心概念,主要涉及RDD(弹性分布式数据集)的操作和编程模型。以下是基于题目内容展开的详细知识点解析: 1. **RDD(Resilient Distributed Dataset)**:...

    Spark-Transformation和Action算子.md

    ### Spark Transformation和Action算子详解 #### 一、Transformation **Transformation** 在 Spark 中是指对 RDD(弹性分布式数据集)进行的各种转换操作。这些操作并不会立即执行,而是延迟执行,直到遇到 Action...

    Spark 1.0.0 API (java)

    - **RDD(Resilient Distributed Datasets)**:Spark的基础数据抽象,是一个容错的、不可变的数据集,可在集群中并行处理。RDD通过分区分散在多个节点上,支持转换和行动操作。 - **转换(Transformations)**:...

    Scala-hadoop-spark-新教程含金量最高的大数据教程

    通过上述内容的详细介绍,我们可以了解到Scala、Hadoop、Spark在大数据处理领域的基础概念和技术要点。特别是对于初学者来说,掌握了如何使用Scala和Java创建SparkContext和RDD对象,以及如何在Eclipse环境下进行...

    大数据实验报告Spark编程实现TopN和InvertedIndex程序.doc

    通过这次实验,我们学习到了 Spark 编程的基础知识,包括如何使用 sortByKey、parallelize 和 flatMap 等函数来进行数据处理和分析。此外,我们也了解到了如何使用 Spark 来实现 TopN 和 InvertedIndex 程序。实验...

    Spark python API 函数调用学习

    Spark Python API,通常被称为PySpark,是Apache Spark与Python编程语言的接口,使得开发者能够利用Python的简洁性和Spark的强大计算能力处理大规模数据。PySpark在大数据处理领域具有广泛的应用,尤其适合于数据...

    Spark MLlib机器学习01.pdf

    根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 1. Spark MLlib 简介 ...通过学习这些内容,可以帮助读者更好地理解和掌握 Spark MLlib 的使用方法,为后续深入学习打下坚实的基础。

    Python数据科学速查表 - Spark RDD 基础1

    例如,`sc.parallelize()`函数用于创建RDD,如`rdd = sc.parallelize([('a',7),('a',2),('b',2)])`,它将列表转换为并行化的数据集。 接着,RDD的操作包括转换和行动。转换函数如`map()`和`flatMap()`对RDD的每个...

    spark考试(练习题)编程题笔记!

    1. 从集合获取RDD:使用`sc.parallelize`或`sc.makeRDD`方法可以将本地集合转换为RDD。 2. 从文件获取RDD:使用`sc.textFile`或`sc.wholeTextFiles`方法可以将文件或文件夹中的数据转换为RDD。 三、RDD操作 RDD...

    25个经典Spark算子的JAVA实现

    根据给定文件的信息,本文将详细介绍25个经典Spark算子的Java实现,并结合详细的注释及JUnit测试结果,帮助读者更好地理解Spark算子的工作原理及其应用方式。 ### Spark算子简介 在Apache Spark框架中,算子是用于...

    Spark理论和PySpark.pdf

    Spark理论和PySpark是大数据处理领域的重要主题,涉及到Apache Spark框架以及其Python接口PySpark。Spark是一个用于大规模数据处理的高性能计算框架,它提供了一种快速、通用且可扩展的方式来处理数据。以下是关于...

    Spark与mongodb整合完整版本

    将 Spark 与 MongoDB 整合,可以实现高性能的数据处理和分析,本文将详细介绍如何将 Spark 与 MongoDB 整合。 一、准备阶段 要使用 Spark 与 MongoDB 整合,需要满足以下条件: 1. 需要有 MongoDB 的基础 2. ...

    spark演示文档

    根据提供的信息,我们可以总结出以下关于Spark...以上便是基于所提供的部分文件内容总结出来的关于Spark的基础知识点,这些内容涵盖了Spark的基础概念、Scala的基本语法以及RDD的操作等方面。希望对学习Spark有所帮助。

    sparkStreaming实战学习资料

    ### Spark核心概念简介 #### Spark概述 Apache Spark是一款开源的大数据处理框架,它提供了一种高效、可伸缩的方式来处理大规模的数据...通过以上介绍,希望能够帮助读者更好地理解和掌握Spark的相关知识和技术要点。

    Spark相关知识点精选

    - **1.2.1 Spark Core**: 实现了Spark的基础功能,例如任务调度、内存管理、错误恢复及与存储系统的交互。其中,弹性分布式数据集(Resilient Distributed Dataset, RDD)是核心抽象之一。 - **1.2.2 Spark SQL**: ...

    sparkrdd的讲解

    Spark提供了两种主要的分片函数:基于哈希的`HashPartitioner`和基于范围的`RangePartitioner`。 - **数据访问位置**:RDD维护了一个优先位置列表,指明了每个分区的最佳计算位置,这有助于实现位置感知性调度,...

Global site tag (gtag.js) - Google Analytics