关于设置 maxPartitionBytes

maxPartitionBytes是什么

Spark在读取文件时默认设置每个partition 最多存储128M的数据。所以当读取的文件,比如csv文件小于128M,则这个文件的所有内容会放到一个partition里面。
在这里插入图片描述

为什么要设置 maxPartitionBytes

当你想提高一下处理效率的时候,你就会用到maxPartitionBytes
举例:你现在电脑有2个处理器,要处理一个60M的csv文件,这时你用spark.read.csv()把数据读进来了,在设置Spark Session时,setMaster("local[*]")。Spark会把这60M的数据都放到2个partition里。
因为
the number of partition = max(the number of blocks of the file, sc.defaultMinPartitions)
partition 的数量 = 取最大(这个文件被分成几块,默认的最小分区数)
60M的文件没超过128M,所以不会被分割,所以是“1”;默认使用所有的处理器,处理器数是“2”,所以60M的数据会分到两个partition里。
你为了提高平行处理的效率,可以把默认的128M改成,比如说10M,这样,在读取文件时,Spark就会把这60M的文件分别存储在6个partition里,这样之后的运算效率就会高很多。

PS:为啥是6个partition?60M的文件会被分成6个block,然后6>2(默认使用全部处理器,2个)

怎么设置,以Python为例

maxPartitionBytes的设置需要在你开始创建Spark Session时设置。

from pyspark.sql import SparkSession 
spark = SparkSession\
  .builder()\
  .appName("Spark SQL basic example")\
  .config("spark.sql.files.maxPartitionBytes", 10000000)\
  .getOrCreate()
from pyspark.sql import SparkSession 
spark = SparkSession\
  .builder()\
  .appName("Spark SQL basic example")\
  .config("spark.sql.files.maxPartitionBytes", 10000000)\
  .getOrCreate()

References:

[1] https://spark.apache.org/docs/2.4.0/sql-performance-tuning.html#other-configuration-options
[2] https://stackoverflow.com/questions/52043874/limiting-maximum-size-of-dataframe-partition

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值