У меня есть этот простой код
import pandas as pd
file = pd.read_parquet('file.rot',engine='fastparquet')
file.rot — это таблица данных (числа с плавающей запятой) с 5 столбцами.
Когда я запускаю его, появляется такая ошибка
File ~\miniconda3\Lib\site-packages\spyder_kernels\py3compat.py:356 in compat_exec
exec(code, globals, locals)
File c:\users\josé\onedrive\ambiente de trabalho\draft.py:10
file = pd.read_parquet('file.rot',sep='=',engine='fastparquet')
File ~\miniconda3\Lib\site-packages\pandas\io\parquet.py:667 in read_parquet
return impl.read(
File ~\miniconda3\Lib\site-packages\pandas\io\parquet.py:402 in read
parquet_file = self.api.ParquetFile(path, **parquet_kwargs)
File ~\miniconda3\Lib\site-packages\fastparquet\api.py:135 in __init__
self._parse_header(fn, verify)
File ~\miniconda3\Lib\site-packages\fastparquet\api.py:215 in _parse_header
f.seek(-(head_size + 8), 2)
OSError: [Errno 22] Invalid argument
Я не знаю, что я делаю не так, или я сделал что-то не так при установке fastparquet на миниконду
Что такое файл .rot?
это просто текстовый файл с завершением .rot (навязанный моим профессором, но я думаю, что это помогает различать файлы с тем же именем)
Ваш файл конечно не паркетный.
что, если я сохраню файл как file.parquet? Конвертируется ли он в файл паркета?
Нет, изменение расширения файла не делает его волшебным образом файлом паркета.
Для тех, кому интересно, вот что на самом деле происходит, когда fastparquet пытается прочитать файл как паркет. Согласно спецификации паркета, последние четыре байта файла должны быть b"PAR1", а четыре байта перед ними дают размер нижнего колонтитула в байтах. Вы можете нажать verify=True
, чтобы проверить магические байты:
>>> fastparquet.ParquetFile('file.rot', engine='fastparquet', verify=True)
ParquetException: File parse failed
Это не значение по умолчанию и не делается пандами. Таким образом, fastparquet принял размер, заданный четырьмя предыдущими байтами, возможно, это какое-то случайное большое число, и поэтому seek()
в файле не работает, поскольку предполагаемое местоположение находится за пределами файла.
да, я попробовал еще раз, и появляется та же ошибка. Также пробовал установить и использовать вместо pyarrow (используя вместо file.parquet) и пишет, что файл либо поврежден, либо не является файлом паркета