我有一个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
答案 0 :(得分:0)
这是由于书签而发生的。我已经在触发器定义中启用了作业书签[1]。请注意,这也是创建触发器时的默认选择。在这种情况下,当调用gumContext并且发现没有新数据要处理时,它将返回一个空的Dataframe(DF),并且spark无法从中推断出任何模式。这解释了为什么DF上的已注册表没有任何字段。如果脚本是由Web控制台启动的,则该规则不适用,因为默认情况下,作业书签是禁用的。当我禁用书签时,它可以正常工作。
[1]工作书签https://docs.aws.amazon.com/glue/latest/dg/monitor-continuations.html