ETL 作业失败,在 AWS Glue 中出现 pyspark.sql.utils.AnalysisException



我在 AWS 胶水中有一个由调度程序触发的 ETL 作业。我的ETL语言是python。 我正在尝试 - 在 s3 存储桶中写入查询结果。为此,我使用了sparkSql。 此作业在由计划程序触发时失败,但在手动运行时成功。它为在 spark df 中可用的列(事件日期(抛出错误。

下面是日志。

Traceback (most recent call last):
File "script_2018-06-22-11-10-05.py", line 48, in <module>
error_report_result_df = spark.sql(sql_query)
File "/mnt/yarn/usercache/root/appcache/application_1529665635815_0001/container_1529665635815_0001_01_000001/pyspark.zip/pyspark/sql/session.py", line 603, in sql
File "/mnt/yarn/usercache/root/appcache/application_1529665635815_0001/container_1529665635815_0001_01_000001/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
File "/mnt/yarn/usercache/root/appcache/application_1529665635815_0001/container_1529665635815_0001_01_000001/pyspark.zip/pyspark/sql/utils.py", line 69, in deco
pyspark.sql.utils.AnalysisException: u"cannot resolve '`eventdate`' given input columns: []; line 1 pos 480;1

这是因为书签而发生的。我已经在我的触发器定义中启用了作业书签 [1]。请注意,这也是创建触发器时的默认选择。在这种情况下,当调用 glueContext 并且它看到没有要处理的新数据时,它会返回一个空的数据帧 (DF(,并且 Spark 无法从中推断出任何架构。这就解释了为什么 DF 上的注册表没有任何字段。如果脚本由 Web 控制台启动,则同样不适用,因为默认情况下作业书签处于禁用状态。当我禁用书签时,它起作用了。

[1] 作业书签 https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html

最新更新