Spark分区数计算

分区数决定并行度,所以其重要性在性能调优方面不言而喻。
1、如果分区数过少,一方面会造成并行度不够,可能造成集群资源闲置,不能充分发挥整个集群的能力。另一方面会造成分区过大,发生数据倾斜的可能性就更高。
2、如果分区数过多,那么花在任务调度上的时间可能要比实际执行任务的时间长。

--------------------------------------------------分区数的确定--------------------------------------------------

在没有指定分区数的情况下,分区数默认被设置为defaultMinPartitions
def defaultMinPartitions: Int = math.min(defaultParallelism, 2) 也就是说,分区数不超过2个,
官方给的解释是为了保证在处理小文件时的性能。
这种情况更多地适用于从一个Scala集合来创建一个RDD,例如sc.parallelize(List(1,2,3,6))。

一、对于Hadoop数据源

一般情况下,分区数可通过如下公式表示
分区数=max(sc.defaultParallelism, total_data_size / data_block_size)

Spark支持所有hadoop I/O格式,因为它使用相同的Hadoop InputFoarmat API以及Spark自有的其它格式化程序。因此,在默认情况下,Spark的输入分区和Hadoop/MapReduce的输入分片方式一致。

通常情况下,Spark为每一个hdfs块创建一个分区(注:如果行特别长,大

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值