Spark RDD与DataFrame读取文件时分区数差异原因探究
Spark DataFrame与RDD读取文件分区数差异的原因
RDD textFile的分区逻辑
sc.textFile()读取文件时,默认分区数由文件的HDFS块数和Spark的defaultParallelism(集群可用核数或本地模式CPU核数)共同决定。对于小于单个HDFS块的小文件(比如你这个2MB的文件),Spark默认会生成至少2个分区(除非通过minPartitions参数指定更小值),这么做是为了避免小文件只占用一个分区,浪费并行处理的能力。DataFrame CSV读取(开启inferSchema)的特殊处理
当设置inferSchema=true时,Spark需要完整扫描整个文件来推断每一列的数据类型。为了完成这个全局扫描,Spark会把整个文件作为一个整体读取,生成单分区的RDD,后续也不会自动拆分分区。如果关闭inferSchema(默认所有列都是String类型),Spark就会采用和RDD类似的分区规则,此时分区数会和textFile()的结果一致。
内容的提问来源于stack exchange,提问作者Youssef Alaa Etman
相关产品推荐
相关产品推荐

