我正处理一个奇怪的情况,我有小桌子和大桌子来处理使用spark,它必须是一个单一的火花作业。
为了达到最佳性能目标,我需要设置一个名为
的属性spark.sql.shuffle.partitions = 12 for small tables and
spark.sql.shuffle.partitions = 500 for bigger tables
我想知道如何在spark中动态更改这些属性? 我可以拥有多个配置文件并在程序中调用它吗?
答案 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