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()方法的时候,会为每个集合对象创建最佳分区,而这对后续的调用优化很有帮助。
相关推荐
当Spark对数据操作和转换时,会自动将RDD中的数据分发到集群,并将操作并行化执行。 Spark中的RDD是一个不可变的分布式对象集合。每个RDD都倍分为多个分区,这些分区运行在集群中的不同节点。RDD可以包含Python、...
根据提供的文件信息,我们可以深入探讨Hadoop与Spark的相关知识点,特别是Spark框架的特性和优势。 ### Spark概述 Spark是一款用于执行分布式计算的框架,它具备高度可扩展性,能够处理TB级别的数据。Spark提供了...
Spark Python K-nn 简单但具有存储效率的函数,用于计算K个最近的邻居。需要安装Numpy,scikit-learn。安装将jakac:spark-python-knn:0.0.3添加到您的应用程序要求中: $SPARK_HOME/bin/pyspark --packages jakac:...
Spark是Apache软件基金会下的一个开源大数据处理框架,它在分布式计算领域有着广泛的应用。...通过阅读和实践这些内容,你可以更深入地理解Spark的工作原理和应用方式,为日后的数据分析和处理项目打下坚实基础。
《Spark编程基础及项目实践》课后习题与答案涵盖了Spark的核心概念,主要涉及RDD(弹性分布式数据集)的操作和编程模型。以下是基于题目内容展开的详细知识点解析: 1. **RDD(Resilient Distributed Dataset)**:...
### Spark Transformation和Action算子详解 #### 一、Transformation **Transformation** 在 Spark 中是指对 RDD(弹性分布式数据集)进行的各种转换操作。这些操作并不会立即执行,而是延迟执行,直到遇到 Action...
- **RDD(Resilient Distributed Datasets)**:Spark的基础数据抽象,是一个容错的、不可变的数据集,可在集群中并行处理。RDD通过分区分散在多个节点上,支持转换和行动操作。 - **转换(Transformations)**:...
通过上述内容的详细介绍,我们可以了解到Scala、Hadoop、Spark在大数据处理领域的基础概念和技术要点。特别是对于初学者来说,掌握了如何使用Scala和Java创建SparkContext和RDD对象,以及如何在Eclipse环境下进行...
通过这次实验,我们学习到了 Spark 编程的基础知识,包括如何使用 sortByKey、parallelize 和 flatMap 等函数来进行数据处理和分析。此外,我们也了解到了如何使用 Spark 来实现 TopN 和 InvertedIndex 程序。实验...
Spark Python API,通常被称为PySpark,是Apache Spark与Python编程语言的接口,使得开发者能够利用Python的简洁性和Spark的强大计算能力处理大规模数据。PySpark在大数据处理领域具有广泛的应用,尤其适合于数据...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 1. Spark MLlib 简介 ...通过学习这些内容,可以帮助读者更好地理解和掌握 Spark MLlib 的使用方法,为后续深入学习打下坚实的基础。
例如,`sc.parallelize()`函数用于创建RDD,如`rdd = sc.parallelize([('a',7),('a',2),('b',2)])`,它将列表转换为并行化的数据集。 接着,RDD的操作包括转换和行动。转换函数如`map()`和`flatMap()`对RDD的每个...
1. 从集合获取RDD:使用`sc.parallelize`或`sc.makeRDD`方法可以将本地集合转换为RDD。 2. 从文件获取RDD:使用`sc.textFile`或`sc.wholeTextFiles`方法可以将文件或文件夹中的数据转换为RDD。 三、RDD操作 RDD...
根据给定文件的信息,本文将详细介绍25个经典Spark算子的Java实现,并结合详细的注释及JUnit测试结果,帮助读者更好地理解Spark算子的工作原理及其应用方式。 ### Spark算子简介 在Apache Spark框架中,算子是用于...
Spark理论和PySpark是大数据处理领域的重要主题,涉及到Apache Spark框架以及其Python接口PySpark。Spark是一个用于大规模数据处理的高性能计算框架,它提供了一种快速、通用且可扩展的方式来处理数据。以下是关于...
将 Spark 与 MongoDB 整合,可以实现高性能的数据处理和分析,本文将详细介绍如何将 Spark 与 MongoDB 整合。 一、准备阶段 要使用 Spark 与 MongoDB 整合,需要满足以下条件: 1. 需要有 MongoDB 的基础 2. ...
Apache Spark是一种快速的分布式计算系统,它为大...本文档提供了Spark RDD的基础知识点,为数据分析人员在使用PySpark进行数据处理时提供了基础操作的速查表,帮助他们快速理解和使用PySpark进行大规模数据分析任务。
根据提供的信息,我们可以总结出以下关于Spark...以上便是基于所提供的部分文件内容总结出来的关于Spark的基础知识点,这些内容涵盖了Spark的基础概念、Scala的基本语法以及RDD的操作等方面。希望对学习Spark有所帮助。
### Spark核心概念简介 #### Spark概述 Apache Spark是一款开源的大数据处理框架,它提供了一种高效、可伸缩的方式来处理大规模的数据...通过以上介绍,希望能够帮助读者更好地理解和掌握Spark的相关知识和技术要点。
通过对《Spark MLlib机器学习第1周》内容的学习,我们可以获得Spark MLlib的基础入门知识,为深入理解和应用Spark进行机器学习打下坚实的基础。随着后续课程的深入,我们还将接触到更多高级的机器学习概念和应用。