在Scala中将数据帧写入csv ld时,日期字段将转换为数字,如 - 1479740431158000
我尝试了各种选项但没有效果
有没有办法让csv中的字段以正确的格式编写? 我正在使用Spark 2.0
scala> tgt.write.format("com.databricks.spark.csv").option("header", "false").option("dateFormat", "MM/dd/yyyy HH:mm:ss").save("/data/mi30/apps.csv")
scala> tgt.write.format("com.databricks.spark.csv").option("header", "false").option("dateFormat", "mm/dd/yyyy HH:mm:ss").save("/data/mi30/apps.csv")
scala> tgt.write.format("com.databricks.spark.csv").option("header", "false").option("dateFormat", "yyyy-mm-dd hh:mm:ss").save("/data/mi30/apps.csv")
scala> tgt.write.format("com.databricks.spark.csv").option("header", "true").option("dateFormat", "yyyy-mm-dd hh:mm:ss").save("/data/mi30/apps.csv")
scala> tgt.write.format("com.databricks.spark.csv").option("header", "true").option("dateFormat", "yyyy-MM-dd HH:mm:ssX").save("/data/mi30/apps.csv")
scala> tgt.write.format("com.databricks.spark.csv").option("header", "true").option("dateFormat", "yyyy-MM-dd HH:mm:ssS").save("/data/mi30/apps.csv")
scala> tgt.write.format("com.databricks.spark.csv").option("header", "true").option("dateFormat", "yyyy-MM-dd HH:mm:ss:S").save("/data/mi30/apps.csv")
scala> tgt.printSchema
root
|-- empno: integer (nullable = true)
|-- ename: string (nullable = true)
|-- message_id: string (nullable = true)
|-- deptno: integer (nullable = true)
|-- md5value: string (nullable = true)
|-- batchid: string (nullable = true)
|-- currind: string (nullable = true)
|-- start_date: timestamp (nullable = true)
|-- end_date: timestamp (nullable = true)
|-- update_date: timestamp (nullable = true)
答案 0 :(得分:0)
Spark 2.0.0存在编写日期格式的问题,但Spark 2.0.1中已修复此问题。请检查https://github.com/databricks/spark-csv/issues/392。你也应该使用" csv"而不是" com.databricks.spark.csv"因为这已包含在最新版本的apache-spark中。所以你可以使用像
tgt.write.format("csv").option("header", "false").option("dateFormat", "yyyy-MM-dd").save("/data/mi30/apps.csv")