没有开启“自动扩展工作节点数量”选项,Glue作业无法对数据进行排序。

0

【以下的问题经过翻译处理】 我使用AWS Glue Studio创建了一个ETL作业,执行以下过程。

  1. 通过Glue数据目录中的表,从Oracle数据库表读取数据源。
  2. 执行SQL语句"select * from tableA order by col1"。
  3. 将DynamicFrame重新分区到1个输出。
  4. 将DynamicFrame写入csv文件。

如果我勾选了"Automatically scale the number of workers"选项,则输出数据会排序。

但是如果我取消勾选该选项,则输出数据不会排序("order by"子句不起作用)。

这种现象的原因是什么?

profile picture
专家
已提问 5 个月前46 查看次数
1 回答
0

【以下的回答经过翻译处理】 我的理解是您正在使用 repartition 或 coalesce 命令将数据重新分区到 1 个分区(有 1 个文件)。

现在您必须考虑 Spark 在分布式集群中运行,并且每个分区都由不同的执行程序管理,因此在正常执行中,当您从 Oracle 读取数据时,即使它在摄取期间被排序,它也可能被拆分和重新合并在不保留排序顺序之后。 这就是为什么没有选中 Autoscaling 时数据没有排序的原因。

现在,当启用自动缩放时,您告诉 Glue 仅启动实际需要的执行程序数。这与 Spark Lazy 评估 和您的 repartition(1) 相结合可以使胶水仅启动一个执行程序并且因此按照您的排序顺序读取和写入数据。

要验证它,您可以查看 2 个作业的 Spark UI 并查看有多少执行者在作业期间随时运行。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则