You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Glue开发端点ETL任务报错:原正常代码现运行失败

搞定AWS Glue ETL里的日期解析报错问题

嘿,我来帮你排查这个突然冒出来的报错问题~先看你的代码,有两个关键问题需要修复:

1. 先搞定语法错误

你创建DataFrame的时候,两个元组之间漏了逗号,这是最基础的语法问题,直接会导致代码跑不起来:

# 原来的错误写法
df1= sqlContext.createDataFrame([("11/25/1991","11/24/1991","11/30/1991") ("11/25/1391","11/24/1992","11/30/1992")], schema=['first', 'second', 'third'])

# 修正后(给两个元组之间加个逗号)
df1= sqlContext.createDataFrame([
    ("11/25/1991","11/24/1991","11/30/1991"),
    ("11/25/1391","11/24/1992","11/30/1992")
], schema=['first', 'second', 'third'])

2. 处理日期解析的异常

除了语法问题,你的UDF还会因为"11/25/1391"这个日期报错——因为AWS Glue用的DateType底层是Java的java.sql.Date,它只支持1900到9999年的日期,1391年早于1900,直接就触发解析异常了。

给你两种解决思路:

思路一:给UDF加异常处理

自己写个带容错的日期解析函数,遇到无效日期返回null或者默认值:

from pyspark.sql.functions import udf, col
from pyspark.sql.types import DateType
from datetime import datetime

def safe_parse_date(date_str):
    try:
        dt = datetime.strptime(date_str, '%m/%d/%Y')
        # 检查年份是否在有效范围内
        if 1900 <= dt.year <= 9999:
            return dt.date()
        else:
            return None
    except (ValueError, TypeError):
        # 处理格式错、空值这些情况
        return None

# 注意udf和括号之间别留空格哦
func = udf(safe_parse_date, DateType())

df = df1.withColumn('test', func(col('first')))
df.show()

思路二:用Spark内置函数更高效

其实Spark有现成的to_date函数,比自定义UDF性能好,还自带容错,无效日期直接返回null:

from pyspark.sql.functions import to_date

# 用内置函数替代UDF,省心又高效
df = df1.withColumn('test', to_date(col('first'), 'MM/dd/yyyy'))
df.show()

额外小建议

如果你的数据源里经常有这种奇怪的日期,建议先做一步数据清洗,提前过滤掉无效数据,或者统一转换格式,避免后续ETL环节出问题~

内容的提问来源于stack exchange,提问作者Basanta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:23:05