首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当读取文件时,分区的数量是如何由Spark决定的?

当读取文件时,分区的数量是如何由Spark决定的?
EN

Stack Overflow用户
提问于 2020-03-01 17:05:35
回答 1查看 4.7K关注 0票数 2

当读取文件时,分区的数量是如何由Spark决定的?

假设hdfs目录中有一个10 GB的单个文件,而另一个hdfs位置是10 GB卷的多个部分文件。

如果这两个文件是在两个单独的星火数据帧中读取的,那么它们的分区数以及基于什么逻辑呢?

EN

回答 1

Stack Overflow用户

发布于 2020-03-01 17:43:17

如何:确定分区中找到了这些信息,上面写着:

这个数字是如何确定的?在上一篇文章中描述了星火星团将RDDs分组的方式。(作为快速提醒,像重新分区和reduceByKey这样的转换会产生阶段边界。)一个阶段中的任务数与阶段中最后一个RDD中的分区数相同。RDD中的分区数与它所依赖的RDD中的分区数相同,但有几个例外:该转换允许创建一个具有比其父RDD更少的分区的RDD,联合转换使用其父分区数之和创建一个RDD,而cartesian使用其产品创建一个RDD。 没有父母的RDDs呢?由textFile或hadoopFile生成的RDDs的分区由所使用的底层MapReduce InputFormat确定。通常,要读取的每个HDFS块都有一个分区。并行化产生的RDD分区来自用户提供的参数,如果没有给出参数,则来自spark.default.parallelism。

当Spark从HDFS读取一个文件时,它会为单个输入分区创建一个分区。输入拆分由用于读取该文件的Hadoop InputFormat设置。例如,如果使用textFile(),则在Hadoop中将是TextInputFormat,这将为HDFS的单个块返回一个分区(但分区之间的分割将在在线拆分中完成,而不是精确的块拆分),除非您有一个压缩的文本文件。在压缩文件的情况下,您将得到单个文件的单个分区(因为压缩的文本文件是不可分割的)。

如果在HDFS上存储了一个10 79的未压缩文本文件,那么使用默认的HDFS块大小设置(128 79 ),它将存储在79个块中,这意味着从该文件读取的RDD将有79个分区。

此外,如果在默认情况下spark提供的分区数量不满意,我们可以传递所需的分区数,如下所示:

代码语言:javascript
运行
复制
>>> rdd1 = sc.textFile("statePopulations.csv",10) // 10 is number of partitions 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60477563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档