Я выгружаю таблицу Postgres с помощью команды копирования, выводимой в CSV.
CSV содержит метки времени, отформатированные так: 2011-01-01 12:30:10.123456+00
.
Я читаю CSV как
df = spark.read.csv(
"s3://path/to/csv",
inferSchema=True,
timestampFormat="yyyy-MM-dd HH:mm:ss.SSSSSSX",
...
)
, но это не работает (как и ожидалось).TimestampFormat использует java.text.SimpleDateFormat
, который не имеет наносекундной поддержки.
Я перепробовал множество вариантов формата timestamp, и все они производят либо строковые столбцы, либо неправильно форматируют временную метку.Похоже, что наносекунды заканчиваются переполнением секунд и добавлением времени к моей метке времени.
Я не могу применить схему к CSV, потому что я не всегда знаю это, и я не могу привести столбцы, потому что я не всегда знаю, какие будут временные метки.Я также не могу использовать метку времени на выходе из Postgres, потому что я просто делаю select * ...
.
Как я могу решить эту проблему, чтобы я мог проглотить CSV с правильным форматом метки времени?
Моей первой мыслью было, что мне просто нужно изменить timestampFormat
, кажется, это невозможно?Моя вторая мысль - использовать sed
, чтобы обрезать временную метку, когда я сбрасываю из Postgres.
Я использую искру 2.3.1.
Спасибо за помощь!