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