spark.default.parallelism
和SparkSQL
之间有什么区别?
我试图在var myfunc = function(){
//do something
setTimeout(function(){ myfunc(); }, 100);
}();
中设置它们,但第二阶段的任务编号始终为200.
答案 0 :(得分:52)
从答案here开始,spark.sql.shuffle.partitions
配置为连接或聚合数据移动数据时使用的分区数。
spark.default.parallelism
是RDD
转换后返回的默认分区数,如join
,reduceByKey
和parallelize
未由用户明确设置。请注意,spark.default.parallelism
似乎仅适用于原始RDD
,在使用数据框时会被忽略。
如果您正在执行的任务不是加入或聚合,并且您正在使用数据框,那么设置这些将不会产生任何影响。但是,您可以在代码中调用df.repartition(numOfPartitions)
(不要忘记将其分配给新的val
)来自行设置分区数。
要更改代码中的设置,您只需执行以下操作:
sqlContext.setConf("spark.sql.shuffle.partitions", "300")
sqlContext.setConf("spark.default.parallelism", "300")
或者,您可以在将作业提交到具有spark-submit
./bin/spark-submit --conf spark.sql.shuffle.partitions=300 --conf spark.default.parallelism=300
答案 1 :(得分:1)
spark.default.parallelism 是spark设置的默认分区数,默认为200。 并且如果要增加分区数,则可以应用属性 spark.sql.shuffle.partitions 在spark配置中或运行spark SQL时设置分区数。
通常,当我们出现内存拥塞并看到以下错误时,会使用此 spark.sql.shuffle.partitions : 发生火花错误:java.lang.IllegalArgumentException:大小超过Integer.MAX_VALUE
因此,您可以为每个分区分配256 MB的分区,并可以用于设置进程。
另外如果分区数接近2000,则将其增加到2000以上。由于spark对<2000和> 2000分区应用了不同的逻辑,这将通过减少内存占用量来提高代码性能,因为如果默认情况下数据将被高度压缩> 2000。