我可能对 join/groupBy-agg 有一个幼稚的问题。在 RDD 期间,每当我想要执行一个。 groupBy-agg,我曾经说过(PairRDDFunctions 的)reduceByKey 和可选的 Partition-Strategy(具有分区或 Partitioner 的数量)b。 Join(PairRDDFunctions)及其变体,我曾经有一种方法来提供多个分区
在 DataFrame 中,如何在此操作期间指定分区数?事后我可以使用 repartition()。但这将是工作的另一个阶段。
解决方案在连接期间增加分区/任务数量的一种解决方法是在“ spark-submit”期间将其设置为“ spark.sql.shuffle.partitions”。我试图查看是否有一种方法可以针对 groupBy-agg /连接的每个步骤以编程方式提供此功能?
以编程方式执行此操作的原因是,根据数据帧的大小,我可以使用更多或更少的任务来避免 OutOfMemoryError。
1 回答
抱歉,您不能在每个步骤中指定多个分区,但是:
Spark 将尝试对现有分区进行 re-use(如果存在),因此,例如,如果在进行 groupBy 之前重新分区,它应使用您指定的任意数量的分区(当然,假设您使用的是相同的键)。对于联接而言,如果两个数据帧都使用相同的键(必须是联接键)和相同的分区数进行分区,则不会重新组合。
否则,您确实可以调整
spark.sql.shuffle.partitions