Сегодня я начал использовать пакеты Dask и Paramiko , частично в качестве учебного упражнения, а частично потому, что я начинаю проект, который потребует работы с большими наборами данных (10 сГБ), к которому необходимо получить доступ только с удаленной виртуальной машины (то есть нельзя хранить локально) - у меня есть учетные данные для входа и права sudo для этой виртуальной машины.У меня минимальный опыт анализа данных, и у меня нет опыта работы с наборами данных размером более нескольких тысяч строк.
Следующий фрагмент кода относится к короткой вспомогательной программе, которая создаст кадр данных большого файла CSV.Размещено на ВМ.Позже я хочу передать его вывод (ссылка на кадр данных dask) во вторую функцию, которая выполнит некоторый обзорный анализ.
import dask.dataframe as dd
import paramiko as pm
import pandas as pd
import sys
def remote_file_to_dask_dataframe(remote_path):
if isinstance(remote_path, (str)):
try:
client = pm.SSHClient()
client.load_system_host_keys()
client.connect('#myserver', username='my_username', password='my_password')
sftp_client = client.open_sftp()
remote_file = sftp_client.open(remote_path)
df = dd.read_csv(remote_file)
remote_file.close()
sftp_client.close()
return df
except:
print("An error occurred.")
sftp_client.close()
remote_file.close()
else:
raise ValueError("Path to remote file as string required")
Код не является ни красивым, ни полным, и я заменю имя пользователя ипароль с ssh ключами вовремя, но это не проблема.В блокноте jupyter я ранее открывал соединение sftp с путем к файлу на сервере и считывал его в кадр данных с помощью обычного вызова Pandas read_csv.Однако здесь эквивалентная строка, использующая Dask, является источником проблемы: df = dd.read_csv(remote_file)
.
Я смотрел документацию онлайн ( здесь ), но не могускажите, возможно ли то, что я пытаюсь выше?Кажется, что для сетевых опций, Dask хочет URL.Параметры передачи параметров, например, S3, зависят от серверной части этой инфраструктуры.К сожалению, я не могу разобраться в документации dash-ssh ( здесь ).
Я возился с инструкциями печати и единственной строкой, которая не выполняетсяэто тот, который заявлен.Возникла ошибка: поднять TypeError ('тип URL не понят:% s'% urlpath) TypeError: тип URL не понят:
Может кто-нибудь указать мне правильное направление для достижения того, чтоЯ пытаюсь сделать?Я ожидал, что Dask read_csv
будет функционировать так же, как и Pandas, поскольку он основан на том же самом.
Буду признателен за любую помощь, спасибо.
ps Я знаю о параметре chunksize Pandas '1030 *, но я бы хотел добиться этого через Dask, если это возможно.