页面树结构

2017-07-25 Apache Spark 2.2.0 官方文档中文版发布 : http://spark.apachecn.org/docs/cn/2.2.0/


MachineLearning 优酷地址 : http://i.youku.com/apachecn

转至元数据结尾
转至元数据起始

可以在您的 driver program(驱动程序)中已存在的集合上通过调用  SparkContext parallelize 方法来创建并行集合。该集合的元素从一个可以并行操作的 distributed dataset(分布式数据集)中复制到另一个 dataset(数据集)中去。例如,这里是一个如何去创建一个保存数字 1 ~ 5 的并行集合。

Scala
val data = Array(1, 2, 3, 4, 5)
val distData = sc.parallelize(data)

在创建后,该 distributed dataset(分布式数据集)(distData)可以并行的执行操作。例如,我们可以调用 distData.reduce((a, b) => a + b) 来合计数组中的元素。后面我们将介绍 distributed dataset(分布式数据集)上的操作。

并行集合中一个很重要参数是 partitions(分区)的数量,它可用来切割 dataset(数据集)。Spark 将在集群中的每一个分区上运行一个任务。通常您希望群集中的每一个 CPU 计算 2-4 个分区。一般情况下,Spark 会尝试根据您的群集情况来自动的设置的分区的数量。当然,您也可以将分区数作为第二个参数传递到 parallelize (e.g. sc.parallelize(data, 10)) 方法中来手动的设置它。

注意 :

在代码中有些地方使用了 term slices(词片)(分区的同义词)以保持向后的兼容性。

6 评论

  1. 鱼刺 发表:

    有时也可以用.repartition函数    就类似mr  触发shuffle将数据分布到我们指定的分区中    引用官网以外一句话:We can repartition our data. Calling .repartition(numPartitions) on an RDD in Spark will shuffle the data into the number of partitions we specify. Let’s try adding that to our code.    Introducing a .repartitionwill increase the amount of work that the Spark engine has to do, but the benefit can significantly outweigh that cost. If we’re clever, we could even skip the .repartition by partitioning the initial data source in a better way.

    大致也是在说  合理运用repartition 函数  可以很好的提高性能  但是同时也需要朋友慎重(spark优化和mr还有很大区别 不是一个参数 数个函数代码 就可以把性能提上去的)  更多学习spark  关注  微笑博客空间 

  2. yangjifei 发表:

    这里需要注意repartition和coalesce的使用区别!

  3. 杨阳 发表:

    repartition其实就是coalesce函数第二个参数为true的实现,这样理解有误吗?

    1. 那伊抹微笑 发表:

      def repartition(numPartitions: Int)(implicit ord: Ordering[T] = null): RDD[T] = withScope {
        coalesce(numPartitions, shuffle = true)
      }

      以上为 repartition 的源码,就是调用 coalesce(numPartitions, shuffle = true) 这个方法来实现的,所以是没区别的 !←_←

      也就是说 repartition 的过程总是 shuffle 的!~

  4. yangjifei 发表:

    理解没有错误的,这里想表达的意思是注意下区别。^=^