【问题标题】:Parse dates with microseconds precision with dataframe in Spark在 Spark 中使用数据帧以微秒精度解析日期
【发布时间】:2019-11-01 08:30:03
【问题描述】:

我有一个 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")

但生成的 Dataframe 在毫秒处(错误地)被截断:

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

额外问题:以纳秒精度读取

【问题讨论】:

标签: scala csv apache-spark dataframe time


【解决方案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 在内部以微秒为单位存储数据,因此您可以使用字符串来存储 nanos 或单独的字段或任何其他自定义解决方案

【讨论】:

    猜你喜欢
    • 2015-07-20
    • 2020-04-25
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多