Чтение/запись разделенного паркета с/на SFTP-сервер с помощью pyarrowPython

Программы на Python
Ответить
Anonymous
 Чтение/запись разделенного паркета с/на SFTP-сервер с помощью pyarrow

Сообщение Anonymous »

Недавно я с друзьями занялся анализом данных, и для улучшения обмена данными у нас появился сервер Linux, который мы используем в качестве SFTP-сервера. После этого мы больше не хотим записывать выходные данные в нашу локальную файловую систему, а затем перемещать их на SFTP-сервер (вручную или автоматически), но мы хотели бы читать и записывать данные непосредственно на сервер.
Учитывая размеры наших данных, мы решили записать их в виде паркетных файлов, поскольку функция фильтра особенно полезна для нас.

Код: Выделить всё

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-сервера.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»