Spark学习——分区Partition数

其余更多java基础文章:
java基础学习(目录)java


这部分能力有限,因此推荐一些大神文章阅读学习:数据库

总结

我在以个人理解简单的归纳下,若有不对,但愿你们及时斧正:spa

  • Task和Partition是一一对应的
  • 经过spark.default.parallelism设置sc.defaultParallelism的值
  • sc.defaultMinPartitions=min(sc.defaultParallelism,2)。也就是sc.defaultMinPartitions只有两个值1和2,当sc.defaultParallelism>1时值为2,当sc.defaultParallelism=1时,值为1
  • sc.parallelize(…)的默认Partition值是sc.defaultParallelism的值
  • sc.textFile(…)若是不传Partition值,绝大多数则为HDFS中Block的数量。缘由是partition = max(hdfs文件的block数目, sc.defaultMinPartitions),因为sc.defaultMinPartitions只能是1或2。
    • 若是hdfs文件block数量大于1时,Partition数目就是block数目。
    • 若是hdfs文件block数量等于1时,默认分区数为sc.defaultMinPartitions,只多是1或2。当用参数指定分区数时,rdd的分区数大于等于参数值,本次测试为等于参数值或参数值+1
  • 本地文件也会像hdfs同样进行相似于block的划分,固定按32M来分片。分区数 = max(本地文件的block数目, 参数值)
  • 关系型数据库表读取的df的分区数为1
  • 读取hive表建立的DataFrame的分区数,block数为hive表对应的hdfs文件的block的数目,当sc.defaultParallelism大于block时,df的分区是等于sc.defaultParallelism,当小于block时,df的分区数介于sc.defaultParallelism和block之间

相关文章
相关标签/搜索