Spark用于计算减少任务数量的公式是什么?
我正在运行几个spark-sql查询,reduce任务的数量总是200.这些查询的map任务数量是154.我在Spark 1.4.1上。
这与spark.shuffle.sort.bypassMergeThreshold有关,默认为200
答案 0 :(得分:23)
你所追求的是spark.sql.shuffle.partitions
。根据{{3}}:
spark.sql.shuffle.partitions 200 Configures the number of partitions to use when shuffling data for joins or aggregations.
另一个相关的选项是spark.default.parallelism
,它决定了'不是由用户'设置的转换返回的RDD中的默认分区数,例如join,reduceByKey和parallelize,但是这似乎被Spark忽略了SQL并且仅在处理普通RDD时才相关。
答案 1 :(得分:2)
是的,@ svgd,这是正确的参数。以下是在Scala中重置它的方法:
// Set number of shuffle partitions to 3
sqlContext.setConf("spark.sql.shuffle.partitions", "3")
// Verify the setting
sqlContext.getConf("spark.sql.shuffle.partitions")
答案 2 :(得分:0)
现在在Spark 2 +中设置此参数的操作如下
spark.conf.set("spark.sql.shuffle.partitions", 16)
答案 3 :(得分:0)
通过mapreduce.input.fileinputformat.split
指定最小和最大拆分大小应该会有所帮助。这些参数确定用于将输入文件拆分到的各自的最小和最大块大小。
val spark = SparkSession.builder
.config("mapreduce.input.fileinputformat.split.minsize", "1073741824")
.config("mapreduce.input.fileinputformat.split.maxsize", "1073741824")
.enableHiveSupport().getOrCreate()
此处,拆分大小已保留为1GB(1073741824字节)。 要记住,拼花地板,snappy是可拆分的,而gzip,lzo不是。请参阅更多here。