如何用PySpark将S3中"July 28, 2021"格式字符串转日期导入RDS
问题根因
你之前转换得到NULL值是因为使用的日期格式符和源数据格式不匹配:MON格式符仅支持匹配3位英文月份缩写(如Jul),而你的源数据是完整英文月份名(如July),同时格式串中没有匹配源字符串里日期和年份之间的逗号。
解决方案
无需修改S3源文件,直接使用匹配完整月份名的格式符即可完成转换:
基础转换代码(PySpark)
from pyspark.sql.functions import to_date df_S3 = df_S3.withColumn('visit_date', to_date(df_S3.visit_date, 'MMMM dd, yyyy'))
兼容非英文默认locale的写法
如果执行上述代码后仍返回NULL,说明你的Spark会话默认locale不是英文,无法识别英文月份名称,可显式指定英文locale:
from pyspark.sql.functions import expr df_S3 = df_S3.withColumn('visit_date', expr("to_date(visit_date, 'MMMM dd, yyyy', 'en_US')") )
转换完成后直接按原有流程写入RDS PostgreSQL的date类型列即可正常导入。
内容的提问来源于stack exchange,提问作者Sonu
相关产品推荐
相关产品推荐

