AWS Glue中使用Data Frame将字符串列转换为日期格式问题求助
AWS Glue Spark DataFrame 字符串转日期类型正确实现方案
原代码错误原因
- 第一种写法错误:
datetime.strptime是Python原生方法,仅支持处理单个字符串变量,无法直接作用于Spark DataFrame的整列数据,Spark无法将该方法分发到集群执行节点运行,会直接抛出异常。 - 第二种写法错误:
withColumn方法的第一个参数要求为字符串格式的目标列名,传入col('date_str')属于语法错误,不符合Spark API参数规范。 - 第三种写法错误:未提前导入
to_timestamp函数就直接调用,会抛出名称未定义的报错,补全导入后该写法本身逻辑是可用的。
正确实现代码
from pyspark.sql.functions import from_unixtime, unix_timestamp, col, substring, to_timestamp, to_date from datetime import datetime # Dynamic Frame转Data Frame df = Transform0.toDF() # 对time列截取子串 # 转换前示例:"Thu Sep 03 2020 01:43:52 GMT+0000 (Coordinated Universal Time)" df = df.withColumn('date_str', substring(df['time'],5,20)) # 转换后示例:"Sep 03 2020 01:43:52" # 转换为timestamp类型 df = df.withColumn('date_str', to_timestamp(col('date_str'), 'MMM dd yyyy HH:mm:ss')) # 若仅需要日期(不含时间),可使用to_date方法 # df = df.withColumn('date_str', to_date(col('date_str'), 'MMM dd yyyy HH:mm:ss')) # 验证转换结果 df.select('time', 'date_str').show(truncate=False)
可选兼容配置
如果运行环境locale不为英文,导致月份英文缩写识别失败,可以在作业初始化阶段添加Spark配置:
spark.conf.set("spark.sql.locale", "en_US")
内容的提问来源于stack exchange,提问作者Fer
相关产品推荐
相关产品推荐

