写入csv文件时时间戳更改格式

anauzrmj  于 2021-07-09  发布在  Spark
关注(0)|答案(2)|浏览(422)

我试图保存一个Dataframe到一个csv文件,其中包含一个时间戳。
此列更改csv文件中写入的格式的问题。以下是我使用的代码:

val spark = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate()

    val df = spark.read.option("header",true).option("inferSchema", "true").csv("C:/Users/mhattabi/Desktop/dataTest2.csv")
    //val df = spark.read.option("header",true).option("inferSchema", "true").csv("C:\\dataSet.csv\\datasetTest.csv")
    //convert all column to numeric value in order to apply aggregation function 
    df.columns.map { c  =>df.withColumn(c, col(c).cast("int")) }
    //add a new column inluding the new timestamp column
    val result2=df.withColumn("new_time",((unix_timestamp(col("time"))/300).cast("long") * 300).cast("timestamp")).drop("time")
    val finalresult=result2.groupBy("new_time").agg(result2.drop("new_time").columns.map((_ -> "mean")).toMap).sort("new_time") //agg(avg(all columns..)
   finalresult.coalesce(1).write.option("header",true).option("inferSchema","true").csv("C:/mydata.csv")

当通过df显示时,显示正确的格式

但在csv文件中,它采用以下格式:

inb24sb2

inb24sb21#

使用选项将时间戳格式化为所需的时间戳:

finalresult.coalesce(1).write.option("header",true).option("inferSchema","true").option("dateFormat", "yyyy-MM-dd HH:mm:ss").csv("C:/mydata.csv")

或者

finalresult.coalesce(1).write.format("csv").option("delimiter", "\t").option("header",true).option("inferSchema","true").option("dateFormat", "yyyy-MM-dd HH:mm:ss").option("escape", "\\").save("C:/mydata.csv")
lg40wkob

lg40wkob2#

下面是我用来修改时间戳的csv输出格式的代码片段。
我需要一个“t”字,没有秒或微秒。timestampformat选项确实适用于此。

DF.write
.mode(SaveMode.Overwrite)
.option("timestampFormat", "yyyy-MM-dd'T'HH:mm")

例如 2017-02-20T06:53 如果用空格代替“t”,则得到:

DF.write
.mode(SaveMode.Overwrite)
.option("timestampFormat", "yyyy-MM-dd HH:mm")

例如 2017-02-20 06:53

相关问题