无法使用Scala将Dataframe中的日期字段写入csv

时间:2016-11-24 10:21:30

标签: spark-dataframe

在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)

1 个答案:

答案 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")