如何在PySpark中生成不带时区的current_timestamp()?
解决Spark DataFrame导出CSV时时间戳带时区的问题
我之前也碰到过一模一样的问题!你用F.current_timestamp()生成的是带时区的TimestampType字段,Spark导出CSV时会默认保留时区信息,所以才会出现2019-11-19T16:59:44.000+05:30这种格式。
要得到你想要的yyyy-MM-dd HH:mm:ss格式,只需要用date_format()函数把timestamp类型转换成指定格式的字符串就可以了,代码如下:
from pyspark.sql import functions as F # 生成时间戳并转换为目标格式的字符串 df_new = df.withColumn('LOAD_DATE_TIME', F.date_format(F.current_timestamp(), 'yyyy-MM-dd HH:mm:ss'))
这样处理之后,导出CSV时LOAD_DATE_TIME列就会显示成2019-11-19 16:59:44,完全没有时区部分啦。
如果之后你需要把这个字符串重新转回timestamp类型(不带时区),也可以用to_timestamp()函数:
df_new = df_new.withColumn('LOAD_DATE_TIME', F.to_timestamp('LOAD_DATE_TIME', 'yyyy-MM-dd HH:mm:ss'))
不过如果只是为了导出CSV的话,第一步转成字符串就完全够用了~
内容的提问来源于stack exchange,提问作者anidev711
相关产品推荐
相关产品推荐

