如何让AWS Glue Crawler正确解析JSON中的自定义日期格式?
让AWS Glue Crawler正确解析JSON日期格式的方法
方法1:自定义JSON分类器
AWS Glue默认分类器对部分非通用日期格式识别有限,你可以创建自定义分类器指定解析规则:
- 进入Glue控制台的分类器页面,新建JSON分类器
- 在配置中,通过
jsonPath定位目标字段,同时配置SerDe参数datetime.formats,填入所有需要识别的日期格式,用逗号分隔:yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z',yyyy-MM-dd HH:mm:ss.S,yyyy-MM-dd - 将这个自定义分类器设置为Crawler的优先使用分类器,替换默认规则
方法2:修改Crawler的高级SerDe参数
编辑已有的Crawler,在配置输出步骤展开高级选项:
- 找到设置SerDe参数,添加键
datetime.formats,值填上述三种日期格式的组合 - 保存配置后重新运行Crawler,它会按照指定格式将对应字符串解析为datetime或date类型
方法3:用Glue ETL事后转换类型
如果Crawler已经生成了字符串类型的表,可以通过ETL Job修正:
编写PySpark脚本转换字段类型,示例如下:
from pyspark.sql.functions import to_timestamp, to_date, col # 读取原表数据 df = spark.read.table("your_db.your_raw_table") # 逐一转换日期字段 df = df.withColumn( "isoDateTime", to_timestamp(col("Header.isoDateTime"), "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'") ) df = df.withColumn( "dateTime", to_timestamp(col("Data.dateTime"), "yyyy-MM-dd HH:mm:ss.S") ) df = df.withColumn( "dateOnly", to_date(col("Data.dateOnly"), "yyyy-MM-dd") ) # 写入转换后的表 df.write.mode("overwrite").saveAsTable("your_db.your_transformed_table")
内容的提问来源于stack exchange,提问作者atlan
相关产品推荐
相关产品推荐

