如何为相同的火花作业设置多个火花配置

时间:2018-03-07 04:44:01

标签: apache-spark apache-spark-sql spark-dataframe

我正处理一个奇怪的情况,我有小桌子和大桌子来处理使用spark,它必须是一个单一的火花作业。

为了达到最佳性能目标,我需要设置一个名为

的属性
spark.sql.shuffle.partitions = 12 for small tables and
spark.sql.shuffle.partitions = 500 for bigger tables

我想知道如何在spark中动态更改这些属性? 我可以拥有多个配置文件并在程序中调用它吗?

2 个答案:

答案 0 :(得分:0)

apache-spark documentation描述了这个属性:

  

spark.sql.shuffle.partitions 200配置在为连接或聚合洗牌数据时使用的分区数。

根据上面的描述,您只需要将数据加载到rdds,当您想对它们应用连接或聚合时,您可以使用重新分区方法更改分区号。 如文档中所述,默认值为200,那么您需要一个增加,一个减少分区数。然后你应该使用repartition和coalesce方法。重新分区对于减少和增加都是有用的,但是减少是有一个随机的开销,但是合并没有这个开销,并且比重新分区更优化。

答案 1 :(得分:0)

例如,如果您在镶木地板文件中有表格,则可以提前读取文件并知道是小桌子还是大桌子,并更改随机分区的值。

val hadoopConfig = new Configuration()
val hdfs = FileSystem.get(hadoopConfig)
val shuffle12 = "spark.sql.shuffle.partitions = 12"
val shuffle500= "spark.sql.shuffle.partitions = 500"
val total = hdfs.getContentSummary(new Path(pathTable)).getLength
if (total < x) shuffle12 else shuffle500