Разобрать даты с точностью до микросекунд с фреймом данных в Spark - PullRequest
2 голосов
/ 18 июня 2019

У меня есть 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

Бонусный вопрос: читать с точностью до наносекунды

1 Ответ

1 голос
/ 18 июня 2019

.SSSSS означает миллисекунды, а не микросекунды: java.util. Формат даты SSSSSS: если не микросекунды, какие последние 3 цифры? , https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html Поэтому, если вам нужны микросекунды, вы должны разобрать дату по пользовательскому коду: Обработка микросекунд в Spark Scala

Бонусный ответ: SparkSQL хранит данные в микросекундах внутри, так что вы можете использовать строку для хранения nanos или отдельного поля или любого другого пользовательского решения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...