我有一个csv文件:
Name;Date
A;2018-01-01 10:15:25.123456
B;2018-12-31 10:15:25.123456
我尝试使用Spark Dataframe进行解析:
val df = spark.read.format(source="csv")
.option("header", true)
.option("delimiter", ";")
.option("inferSchema", true)
.option("timestampFormat", "yyyy-MM-dd HH:mm:ss.SSSSSS")
但是生成的数据帧在毫秒被(错误地)截断了:
scala> df.show(truncate=false)
+---+-----------------------+
|Nom|Date |
+---+-----------------------+
|A |2018-01-01 10:17:28.456|
|B |2018-12-31 10:17:28.456|
+---+-----------------------+
df.first()(1).asInstanceOf[Timestamp].getNanos()
res51: Int = 456000000
奖金问题:读取精度为纳秒
答案 0 :(得分:1)
.SSSSS表示毫秒而不是微秒: java.util.Date format SSSSSS: if not microseconds what are the last 3 digits?, https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html 因此,如果您需要微秒,则应通过自定义代码解析日期: Handling microseconds in Spark Scala
奖励答案:SparkSQL在内部以毫秒为单位存储数据,因此您可以使用字符串来存储nano或单独的字段或任何其他自定义解决方案