Pyspark:输出到csv——时间戳格式不同

Pyspark:输出到csv——时间戳格式不同,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我正在使用具有以下时间戳格式的数据集:yyyy-MM-dd-HH:MM:ss 当我将数据输出到csv时,格式更改如下:2019-04-29T00:15:00.000Z 有没有办法将其转换为原始格式,如:2019-04-29 00:15:00 我是否需要将该列转换为字符串,然后将其推送到csv 我是这样对csv说我的文件的: df.coalesce(1).write.format("com.databricks.spark.csv"

我正在使用具有以下时间戳格式的数据集:yyyy-MM-dd-HH:MM:ss

当我将数据输出到csv时,格式更改如下:2019-04-29T00:15:00.000Z

有没有办法将其转换为原始格式,如:2019-04-29 00:15:00

我是否需要将该列转换为字符串,然后将其推送到csv

我是这样对csv说我的文件的:

df.coalesce(1).write.format("com.databricks.spark.csv"
                                       ).mode('overwrite'
                                             ).option("header", "true"
                                               ).save("date_fix.csv")

是的,没错。实现这一点的最简单方法是使用pyspark.sql.functions.date_格式,例如:

import pyspark.sql.functions as f

df.withColumn(
  "date_column_formatted",  
  f.date_format(f.col("timestamp"), "yyyy-MM-dd HH:mm:ss")
)
更多信息请点击这里。
希望这有帮助

是的,没错。实现这一点的最简单方法是使用pyspark.sql.functions.date_格式,例如:

import pyspark.sql.functions as f

df.withColumn(
  "date_column_formatted",  
  f.date_format(f.col("timestamp"), "yyyy-MM-dd HH:mm:ss")
)
更多信息请点击这里。 希望这有帮助

另类 火花>=2.0.0 为格式化CSV设置optiontimestampFormat,yyyy-MM-dd HH:MM:ss

df.coalesce1.write.formatcsv .模式“覆盖” .optionheader,true .optiontimestampFormat,yyyy-MM-dd HH:MM:ss .savedate_fix.csv 根据文件-

timestampFormat默认yyyy-MM-dd'HH:MM:ss.SSSXXX:设置表示时间戳格式的字符串。自定义日期格式遵循java.text.simpleDataFormat中的格式。这适用于时间戳类型

火花<2.0.0 设置optiondateFormat,yyyy-MM-dd HH:MM:ss用于格式化CSV

df.coalesce1.write.formatcom.databricks.spark.csv .模式“覆盖” .optionheader,true .optiondateFormat,yyyy-MM-dd HH:MM:ss .savedate_fix.csv 根据文件-

dateFormat:指定一个字符串,该字符串指示读取日期或时间戳时要使用的日期格式。自定义日期格式遵循java.text.simpleDataFormat中的格式。这适用于DateType和TimestampType。默认情况下,它为null,这意味着试图通过java.sql.Timestamp.valueOf和java.sql.date.valueOf解析时间和日期

参考-

备选方案 火花>=2.0.0 为格式化CSV设置optiontimestampFormat,yyyy-MM-dd HH:MM:ss

df.coalesce1.write.formatcsv .模式“覆盖” .optionheader,true .optiontimestampFormat,yyyy-MM-dd HH:MM:ss .savedate_fix.csv 根据文件-

timestampFormat默认yyyy-MM-dd'HH:MM:ss.SSSXXX:设置表示时间戳格式的字符串。自定义日期格式遵循java.text.simpleDataFormat中的格式。这适用于时间戳类型

火花<2.0.0 设置optiondateFormat,yyyy-MM-dd HH:MM:ss用于格式化CSV

df.coalesce1.write.formatcom.databricks.spark.csv .模式“覆盖” .optionheader,true .optiondateFormat,yyyy-MM-dd HH:MM:ss .savedate_fix.csv 根据文件-

dateFormat:指定一个字符串,该字符串指示读取日期或时间戳时要使用的日期格式。自定义日期格式遵循java.text.simpleDataFormat中的格式。这适用于DateType和TimestampType。默认情况下,它为null,这意味着试图通过java.sql.Timestamp.valueOf和java.sql.date.valueOf解析时间和日期


ref-

因此我的列已经在pyspark中的时间戳中正确格式化。我的问题是,当我将文件放到csv时,它会在T和.000Z上加上图钉。这就是我在将文件保存到csv时需要解决的问题。我理解-问题仍然存在,因为您的列可能是TimestampType,它将始终转换为ISO 8601格式。也许可以尝试强制转换,而不是使用date_格式转换?好的,所以将我的时间戳列强制转换为字符串应该可以工作?所以我的列已经在pyspark的时间戳中正确格式化了。我的问题是,当我将文件放到csv时,它会在T和.000Z上加上图钉。这就是我在将文件保存到csv时需要解决的问题。我理解-问题仍然存在,因为您的列可能是TimestampType,它将始终转换为ISO 8601格式。也许试着直接转换,而不是使用date_格式转换?好的,所以把我的时间戳列转换成字符串应该行吗?我不知道,这太棒了!每天都是上学的日子。投赞成票!:我不知道,这太棒了!每天都是上学的日子。投赞成票!: