HDFS单数据块文件生成Spark RDD为何出现2个分区?
为什么单个HDFS块的文件会生成2个Spark RDD分区?
你的情况主要由两个关键因素导致:
- Spark textFile的默认分区数规则:
sc.textFile()的minPartitions参数默认值是math.min(sc.defaultParallelism, 2)。从你的输出看sc.defaultParallelism=2,所以minPartitions被设为2,Spark会尝试至少创建2个分区。 - Hadoop TextInputFormat的分片逻辑:即使文件只占1个HDFS块,只要文件内容的字节范围能被拆分成多个包含完整行的分片(不会把一行拆到两个分片里),Hadoop的TextInputFormat就会按照minPartitions的要求拆分。你的文件内容刚好可以被分成两个包含完整行的部分,所以最终生成了2个分区。
如果想要强制生成1个分区,只需要在调用textFile时指定minPartitions为1:
rdd1 = sc.textFile("hdfs://localhost:9000/hello.txt", 1)
内容的提问来源于stack exchange,提问作者nayak0765
相关产品推荐
相关产品推荐

