Spark Parallelize 方法

Parallelize是一种在现有集合(例如数组)上创建RDD的方法。集合中的元素将被复制成为一个分布式数据集,然后我们可以在该数据集上进行并行操作。

Parallelize是Spark中创建RDD的三种方式之一,另外两种方法是:

  • 从外部数据源创建,如本地文件系统、HDFS等等。

  • 从现有RDD、DataSet、DataFrame转换而来。

用法:

sc.parallelize(seq: Seq[T], numSlices: Int)
  • sc: SparkContext 对象

  • seq:集合对象

  • numSlices:可选参数,创建数据集的分区数。

numSlices是parallelize的一个重要参数。Spark将为集群的每个分区运行一个任务。默认情况下, Spark会根据集群情况自动设置分区数。但是,你也可以手动设置它(例如 sc.parallelize(data,10))。

示例

完整代码在这里查看。

package com.sparkexamples.spark.rdd

import org.apache.spark.sql.SparkSession

object CreateRDDWithParallelize {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .master("local[1]")
      .appName("SparkExample")
      .getOrCreate()

    val sc = spark.sparkContext

    val rdd1 = sc.parallelize(Array(1,2,3,4,5), 3)
    println("elements of rdd1:" + rdd1.collect().mkString(","))
    println("number of partitions:" + rdd1.getNumPartitions)

    val rdd2 = sc.parallelize(List(6,7,8,9,10))
    println("elements of rdd2:" + rdd2.collect().mkString(","))

    val rdd3 = rdd1.union(rdd2)
    println("elements of rdd3:" + rdd3.collect().mkString(","))

  }

}

运行上面代码输出:

elements of rdd1:1,2,3,4,5
number of partitions:3
elements of rdd2:6,7,8,9,10
elements of rdd3:1,2,3,4,5,6,7,8,9,10