首页 > 解决方案 > Apache Spark:是否可以在 spark 作业中获取数据集计数?

问题描述

有时在我们的集群中运行的一些 Spark 作业运行时间过长不是因为优化不好,而是因为算法的逻辑不好。在大多数情况下,这是一些不必要的连接产生太多行的结果。通常我们通过查看 Spark 执行计划来发现此类作业,我们可以通过查看蓝色阶段标签中的“输出行数:xxx”来找到此类连接。

我想了解 - 是否可以优化此过程并以某种方式自动通知程序员该作业在某些数据集中有太多行(执行后)?

也许我们可以在日志中打印(无需在代码中手动计算数据集的大小)?也许在运行作业之后,我们可以以某种方式获得执行计划的输出并将其保存以供进一步调查?

标签: apache-spark

解决方案


不,这不是一个选择。Spark 将尽最大努力优化查询计划,因此与较低执行级别的手动交互非常有限。spark.sql.shuffle.partitions但是,您可以通过更改某些配置(如or spark.sql.files.maxPartitionBytes)或通过重新分区数据来“控制”每个作业/任务的行,这将导致数据在执行程序之间几乎均匀地重新分配和重新分配。


推荐阅读