1

我有这个代码片段,我仅使用 100 条记录以独立模式在本地运行:

from awsglue.context import GlueContext
glue_context = GlueContext(sc)
glue_df = glue_context.create_dynamic_frame.from_catalog(database=db, table_name=table)
df = glue_df.toDF()
print(df.count())

该模式包含 89 列,所有列都具有字符串数据类型,但 5 列具有结构数据类型的数组。数据大小为 3.1 MB。

此外,以下是有关用于运行代码的环境的一些信息:

  • spark.executor.cores:2
  • spark.executor.id:驱动程序
  • spark.driver.memory:1000M

问题是我不知道为什么第 1 阶段需要 12 分钟才能完成,而它只需要计算 100 条记录。我找不到“扫描镶木地板”和“交换”任务的含义,如图所示: Stage 1 DAG Visualization

我的问题是,是否有更系统的方法来理解这些任务的含义。作为初学者,我非常依赖 Spark UI,但它并没有提供太多关于它已执行的任务的信息。我能够找到哪个任务花费的时间最多,但我不知道为什么会这样以及如何系统地解决它。

4

1 回答 1

1

Spark 代码中的运行时间是根据集群启动时间、DAG 调度器优化时间、运行阶段时间来计算的。在您的情况下,问题可能是由于以下原因:

  • parquet 文件的数量。要测试这一点,请轻松读取表格并将其作为一个 parquet 文件写回。您正在调用一张桌子,但在幕后,它正在读取物理镶木地板文件,因此文件的数量是一个需要考虑的项目。
  • 火花簇的数量。集群的数量应该是您拥有的相关计算资源数量。例如,在您的情况下,您有 2 个核心和一个小型表。因此,只有几个分区而不是默认分区号 200 更有效。

要获得有关火花阶段的更多说明,请使用explain函数并阅读 DAG 结果。作为这个函数的结果,您可以看到并比较Analyzed Logical Plan, Optimized Logical Plan, 和 , 并且Physical Plan这是由内部优化器进程计算的。

要查找该功能的更详细说明,explain请访问此链接

于 2021-01-27T04:49:13.053 回答