Передача и запись паркета с питоном и пандами получили ошибку отметки времени - PullRequest
0 голосов
/ 22 декабря 2018

Я попытался выполнить concat () два файла паркета с пандами в python.
Это может работать, но когда я пытаюсь записать и сохранить фрейм данных в файл паркета, он отображает ошибку:

 ArrowInvalid: Casting from timestamp[ns] to timestamp[ms] would lose data:

Я проверил документ.из панд, это по умолчанию синтаксис метки времени в мс при записи файла паркета.
Как я могу побелить файл паркета использованной схемой после concat?
Вот мой код:

import pandas as pd

table1 = pd.read_parquet(path= ('path.parquet'),engine='pyarrow')
table2 = pd.read_parquet(path= ('path.parquet'),engine='pyarrow')

table = pd.concat([table1, table2], ignore_index=True) 
table.to_parquet('./file.gzip', compression='gzip')

Ответы [ 3 ]

0 голосов
/ 10 июля 2019

Я столкнулся с подобной проблемой при использовании pd.to_parquet, мой последний обходной путь - использование аргумента engine='fastparquet', но я понимаю, что это не поможет, если вам нужно использовать PyArrow специально.

Вещи, которые япопробовал, но это не сработало:

  • @ Обход DrDeadKnee при ручном литье столбцов .astype("datetime64[ms]") у меня не сработал (pandas v. 0.24.2)
  • Передача coerce_timestamps='ms' какkwarg для основной паркетной операции не изменил поведение.
0 голосов
/ 30 июля 2019

Панды уже отправляют неизвестных kwargs в базовый паркетный двигатель, по крайней мере, v0.22.Таким образом, использование table.to_parquet(allow_truncated_timestamps=True) должно работать - я проверил это для панд v0.25.0 и pyarrow 0.13.0.Дополнительные ключевые слова см. В документации по pyarrow .

.
0 голосов
/ 27 июня 2019

Я думаю, что это ошибка, и вы должны делать то, что говорит Уэс.Однако, если вам нужен рабочий код сейчас, у меня есть обходной путь.

Решение, которое работало для меня, состояло в том, чтобы указать столбцы меток времени с точностью до миллисекунды.Если вам нужна точность в наносекунду, это испортит ваши данные ... но если это так, то это может быть наименьшей из ваших проблем.

import pandas as pd

table1 = pd.read_parquet(path=('path1.parquet'))
table2 = pd.read_parquet(path=('path2.parquet'))

table1["Date"] = table1["Date"].astype("datetime64[ms]")
table2["Date"] = table2["Date"].astype("datetime64[ms]")

table = pd.concat([table1, table2], ignore_index=True) 
table.to_parquet('./file.gzip', compression='gzip')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...