Spark基础随笔:分区详解
来源:互联网 发布:戏子家事天下知 编辑:程序博客网 时间:2024/05/21 20:30
1.分区
分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务的个数,也是由RDD(准确来说是作业最后一个RDD)的分区数决定。
2.分区的个数
RDD分区的一个分区原则:尽可能是得分区的个数等于集群核心数目
下面我们仅讨论Spark默认的分区个数,这里分别就parallelize和textFile具体分析其默认的分区数
无论是本地模式、Standalone模式、YARN模式或Mesos模式,我们都可以通过spark.default.parallelism来配置其默认分区个数,若没有设置该值,则根据不同的集群环境确定该值
- 本地模式:默认为本地机器的CPU数目,若设置了local[N],则默认为N
- Apache Mesos:默认的分区数为8
- Standalone或YARN:默认取集群中所有核心数目的总和,或者2,取二者的较大值
结论:
- 对于parallelize来说,没有在方法中的指定分区数,则默认为spark.default.parallelism
- 对于textFile来说,没有在方法中的指定分区数,则默认为min(defaultParallelism,2),而defaultParallelism对应的就是spark.default.parallelism。如果是从hdfs上面读取文件,其分区数为文件分片数(128MB/片)
3.案例
比如我想把所有的(key,value)里面的key较小的value都累加到key较大的上面去。如(3, 6),(5,4),(6, 2)
结果(6,2+4+6=12),(5,4+6=10),(3,6)
val data = Array((3, 6),(5,4),(6, 2)) //key升序 val rdd1 = sc.parallelize(data, 2) //设置2分区 var sum = 0 rdd1.foreach(f => { println((f._1,sum+f._2) + "--" + sum) sum += f._2 })
但很遗憾,结果并我们所想
(3,6)--0(5,4)--0(6,6)--4注意到(3,6)和(5,4)都是0,我们猜测它们的执行代码不在同台机器上(确切地说应该是不在同一分区),我们使用glom来验证下,glom函数会把RDD分区数据组装到数组类型的RDD中
scala> rdd1.glom.collectres28: Array[Array[(Int, Int)]] = Array(Array((3,6)), Array((5,4), (6,2)))Ok,我们的猜想得到了验证,果然它们不在一个分区中。问题暴力简单的解决方法是使用repartition把分区数置1
1 2
- Spark基础随笔:分区详解
- [Spark--基础]--解密Spark的分区
- Spark RDD 分区数详解
- Spark基础随笔:Spark应用程序中设置日志输出级别
- spark基础之RDD详解
- Spark基础随笔:Spark1.6 Idea下远程调试
- Spark分区器HashPartitioner和RangePartitioner代码详解
- Spark分区器HashPartitioner和RangePartitioner代码详解
- Spark分区器HashPartitioner和RangePartitioner代码详解
- Spark分区器HashPartitioner和RangePartitioner代码详解
- Spark分区器HashPartitioner和RangePartitioner代码详解
- Spark分区器HashPartitioner和RangePartitioner代码详解
- Spark 基础——RDD 详解
- Spark自定义分区(Partitioner)
- Spark自定义分区(Partitioner)
- Spark自定义分区(Partitioner)
- Spark-RDD 分区
- Spark自定义分区(Partitioner)
- 57. Insert Interval
- 高通 atlflight error:unknown host service 解决办法
- 矩阵同列同行复制原理
- Android图片选择模块
- linux命令行乱码
- Spark基础随笔:分区详解
- android 验证表单工具类
- 第七周 项目4 队列数组
- 一个Sqrt函数引发的血案(转载)
- 第七周 项目3 - 负数把正数赶出队列
- UITableView头部带有图片并且下拉图片放大效果
- 第五周项目4-数制转换
- caffe训练出错 loss= 87.3365
- web设计中什么是渐进增强和优雅降级