Учитывая размеры наших данных, мы решили записать их в виде паркетных файлов, поскольку функция фильтра особенно полезна для нас.
Код: Выделить всё
import paramiko
import pyarrow.dataset as ds
from fsspec.implementations.sftp import SFTPFileSystem
pkey = paramiko.RSAKey.from_private_key_file(str(Path(os.path.expanduser('~')) / '.ssh/id_rsa'))
fs = SFTPFileSystem(host=host, port=port, username=username, pkey=pkey, look_for_keys=False)
# Don't know if this is necessary, it also works without calling open_sftp()
fs.client.open_sftp()
dataset = ds.dataset('/data/project_xxx/', filesystem=fs, partitioning='hive', format='parquet')
table = dataset.to_table(columns=[...], filter=...)
data = table.to_pandas()
data.to_excel('output/sftptest.xlsx')
FileNotFoundError (при проверке с помощью fs.exists(path) возвращается True)
SFTPError('Получен мусорный пакет')
Похоже, что это работает при выполнении строки, но потом PyCharm
"Невозможно отобразить переменные фрейма"
и следующие строки не выполняются.
Обратите внимание, что все эти ошибки возникают при вызове dataset.to_table().
Кто-нибудь знает, что мы делаем неправильно? Или как мы могли бы улучшить наш код?
Мы ожидали увидеть то же поведение, что и при чтении секционированных паркетов из локальной файловой системы. Или то же самое, когда мы читаем один файл непосредственно с SFTP-сервера.
Мобильная версия