本帖最后由 玩转曼哈顿 于 2019-1-26 15:44 编辑
1.textFile读取文件时,与线程数没有关系 eg:textFile模式下如果文件没有给定分区则是按照文件数进行分区,这种情况是所有文件相同大的情况下,如下图 如果指定分区数textFile(path,3)则是三个分区,在文件不一样大的情况下,分区数则 会增加, eg:3个文件分别为9k,12k,760k加起来是781k,除以3等于260,9/260<1.1(1个分区)12/260<1.1(1个分区).760/260>1.1那么0-260(又是一个分区),760-260=500,500/260>1.1(又是一个分区)500-260=240,240/260<1.1(又一个分区)那么总共就是5个分区,如下图 如果此时不给定分区数则是按照默认最小2个分区去计算,计算出来就是4个分区 2.parallelize模式下 local是按照线程数去分区 eg:local[3]就是3个分区 但是特别注意在prarllelize模式的local下如果不指定线程数,则是1个分区 3.在伪分布式模式下 用spark-shell直接启动查看分区则是1个分区 如果spark-shell --master 则是按照伪集群模式(x为本机上启动的executor数,y为每个executor使用的core数,z为每个 executor使用的内存) spark-shell --master local-cluster[x,y,z] spark.default.parallelism = x * y
|