PySpark中如何将"20130623"格式字符串列转为dd-mm-YYYY格式?
解决方案:Spark日期格式转换(从"yyyyMMdd"到"dd-MM-yyyy")
你的问题根源在于误用了Python原生datetime模块处理Spark DataFrame列——这类Python函数只能处理单个值,无法直接操作DataFrame的列,而且你把列名col_name当成字符串传入int(),自然会触发"invalid literal"错误。
以下是两种可行的Spark原生方案,无需依赖pandas:
方案一:使用to_date + date_format(推荐)
先将字符串格式的日期转为Spark标准Date类型,再格式化为目标字符串格式:
from pyspark.sql.functions import to_date, date_format # 链式调用直接生成目标列 df = df2.withColumn( "col_name_formatted", date_format(to_date(df2["col_name"], "yyyyMMdd"), "dd-MM-yyyy") )
to_date(df2["col_name"], "yyyyMMdd"):识别原列的"20130623"格式(yyyyMMdd对应年-月-日的数字拼接),转为Spark Date类型date_format(..., "dd-MM-yyyy"):将Date类型值格式化为"日-月-年"的字符串格式
方案二:使用unix_timestamp + from_unixtime
如果需要通过时间戳中转(不如方案一直观),可以这样写:
from pyspark.sql.functions import unix_timestamp, from_unixtime df = df2.withColumn( "col_name_formatted", from_unixtime(unix_timestamp(df2["col_name"], "yyyyMMdd"), "dd-MM-yyyy") )
unix_timestamp(...):将原日期字符串转为Unix时间戳from_unixtime(...):将时间戳转为指定格式的字符串
内容的提问来源于stack exchange,提问作者user3521180
相关产品推荐
相关产品推荐

