ETL 作业因 AWS Glue 中的 pyspark.sql.utils.AnalysisException 而失败

ETL job failing with pyspark.sql.utils.AnalysisException in AWS Glue

我在 AWS glue 中有一个由调度程序触发的 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 并且它发现没有要处理的新数据时,它 returns 一个空的 Dataframe (DF) 并且 spark 无法从中推断出任何模式。这就解释了为什么DF上注册的table没有任何字段。如果脚本由 Web 控制台启动,则同样不适用,因为默认情况下作业书签被禁用。当我禁用书签时,它起作用了。

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