spark中textfile方法对文件的分片

以数据源为HDFS上的文件为例:

JavaRDD data_raw = sc.textfile(path, partitionnum),path指定数据所在位置,partitionnum影响data_raw RDD所具有的partition数以及每个partition大小。

首先计算两个值,第一个是与参数partitionnum有关,goalSize = totalSize/partitionnum,totalSize是文件大小,若未传入参数partitionnum,则partitionnum=1。这个goalSize可以看做是用户希望的partition的大小,因为partitionnum影响将文件分为几个partition以及每个partition的大小。

第二个是splitSize = max(minSize,min(goalSize, blockSize)),Apache hadoop 的HDFS blockSize默认为64m

minSize = max(SPLIT_MINSIZE,1),org.apache.hadoop.mapreduce.lib.input.FileInputFormat.SPLIT_SIZE默认值为1,也就是说一个partition的最小Size为1,splitSize可以理解为分片之后实际每个partition的大小。

若是空文件,则goalSize=0,splitSize=1,会产生一个size为1的partition;若不是空文件,则splitSize相当于是考虑用户希望的partition的大小和blockSize的大小,取二者之中更小的那个作为splitSize。

若指定的path中有多个文件,对于小文件(小于splitSize的文件),则一个文件是一个partition;对于大文件(大于splitSize的文件),则分成totalSize/splitSize个partition。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值