火花分配不均匀,仍然偏斜

时间:2018-09-16 11:30:21

标签: apache-spark apache-spark-sql

如何强制(主要是)均匀分配?

我想执行以下操作:

df.repartition(5000) // scatter
.transform(some_complex_function)
.repartition(200) // gather
.write.parquet("myresult")

实际上,重新分区步骤后将执行5000个任务。但是,每个任务的输入文件大小在1MB至16MB之间。

数据仍然偏斜。如何确保它不再歪斜并且有效地使用了群集资源。

编辑

我了解到,这是由于使用了复杂类型的列(即数组)。另外请注意,some_complex_function在此列上操作,即其复杂度随数组中元素的数量而增加。

在这种情况下是否有更好的分区方法?

1 个答案:

答案 0 :(得分:1)

repartition应该统一分配记录数,您可以使用此处列出的技术来验证:Apache Spark: Get number of records per partition

如果您的记录包含一些复杂的数据结构或各种长度的字符串,则每个分区的字节数将不相等。我在这里要求解决此问题的方法:How to (equally) partition array-data in spark dataframe