Spark читает CSV, содержащий наносекундные метки времени - PullRequest
1 голос
/ 20 сентября 2019

Я выгружаю таблицу 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.

Спасибо за помощь!

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