本文参考了:https://www.jianshu.com/p/4b7d07e754fa
- 有以下几个参数:
spark.default.parallelism:(默认的并发数)
在yarn模式下,spark.default.parallelism = max(所有executor使用的core总数, 2)。
举个例子:spark-submit --class geo --master yarn --deploy-mode cluster --executor-memory 1G –num-executors 3 –executor-cores 4 /root/Ting.jar
这里默认的partition个数就是 3*4=12 。 - spark.files.maxPartitionBytes = 128 M(默认) 代表着rdd的一个分区能存放数据的最大字节数,如果一个400m的文件,只分了两个区,则在action时会发生错误。
- 在Sparkcontext中有对应的参数 sc.defaultParallelism = spark.default.parallelism ; sc.defaultMinPartitions = min(spark.default.parallelism,2) 默认最小partition个数。
*经过实际运行spark程序发现,spark读取Hive表产生的Dataframe的partition个数与Hive表中文件block个数有关。也就是说,查询对应的hive数据文件有多少个block,相应产生的Dataframe就有多少个partition。
使用repartition(partitionExprs: Column)可以理解为按照给定的列进行hash排序,并且partition的个数=spark.sql.shuffle.partitions,而spark.sql.shuffle.partitions=200(默认)