当涉及到对程序性能有要求的时候,一定会使用分区技术。
RDD是弹性分布式数据集,通常RDD很大,会被分成很多个分区,分别保存在不同的节点上。增加并行度,减少通信开销。
分区原则:RDD分区的一个分区原则是是得分区的个数尽量等于集群中的CPU核心(Core)数目。
- 如何手动设置分区
(1)创建RDD时:在调用textFile和parallelize方法时手动指定分区个数即可,语法格式:sc.textFile(path, partitionNum)
(2) 通过转换操作得到新的RDD时:直接调用repartition方法即可
实例:repartition的用法
scala> var rdd2 = data.repartition(1)
scala> rdd2.partition.size
res4: Int = 1
scala> var rdd2 = data.repartition(4)
scala> rdd2.partition.size
res5: Int = 5
占位符语法(复习)
data.map((_,1)) 等价于 data.map(x => (x,1))
- 打印元素(RDD元素)
在实际编程中,经常需要把RDD中的元素打印输出到屏幕上,一般采用语句rdd.foreach(println)或者rdd.map(println)
为了能够把多有worker节点上的打印输出信息也显示到Deriver Program中,可以使用collect()方法,比如,rdd.collect().foreach(println),但是由于collect()方法会把各个worker节点上的所有RDD元素都抓取到Driver Program中,因此这可能会导致内存溢出。因此当你只需要打印RDD的部分元素时,可以采用语句rdd.take(100).foreach(println)