python - 是否可以结合使用 Paramiko 和 Dask 的 read_csv() 方法从远程服务器读取 .csv?

标签 python pandas ssh paramiko dask

今天我开始使用 DaskParamiko 软件包,部分是作为学习练习,部分是因为我正在开始一个需要处理大型数据集的项目( 10 GB),只能从远程虚拟机访问(即无法在本地存储)。

以下代码属于一个简短的帮助程序,它将为虚拟机上托管的大型 csv 文件创建 dask 数据帧。我想稍后将其输出(引用 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 key 替换用户名和密码,但这不是问题。在 jupyter 笔记本中,我之前使用服务器上文件的路径打开了 sftp 连接,并使用常规 Pandas read_csv 调用将其读入数据帧。但是,这里使用 Dask 的等效行是问题的根源:df = dd.read_csv(remote_file)

我已经查看了在线文档( here ),但我无法判断我上面尝试的是否可行。看来对于网络选项,Dask 需要一个 url。参数传递选项,例如S3 似乎依赖于该基础设施的后端。不幸的是,我无法理解 dash-ssh 文档 ( here )。

我已经研究过 print 语句,唯一无法执行的行就是所述的那一行。出现的错误是:raise TypeError('url type not recognize: %s' % urlpath) 类型错误:无法理解 url 类型:

任何人都可以为我指明实现我想要做的事情的正确方向吗?我希望 Dask 的 read_csv 能够像 Pandas 一样发挥作用,因为它基于相同的功能。

非常感谢任何帮助,谢谢。

附:我知道 Pandas 的 read_csv chunksize 选项,但如果可能的话,我想通过 Dask 实现此目的。

最佳答案

在 Dask 的主版本中,文件系统操作现在使用 fsspec,它与之前的实现(s3、gcs、hdfs)一起现在支持一些额外的 file-systems ,请参阅协议(protocol)标识符 fsspec.registry.known_implementations 的映射.

简而言之,如果您从 master 安装 fsspec 和 Dask,那么使用“sftp://user:pw@host:port/path”这样的 URL 现在应该适合您。

关于python - 是否可以结合使用 Paramiko 和 Dask 的 read_csv() 方法从远程服务器读取 .csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56623297/

相关文章:

python - 如何将字符串值分配给numpy中的数组?

python - 使用 Python 检查未读的 Gmail 邮件数

python - Pandas:从保留其顺序的 2D numpy 数组创建数据框

python - 当 key 丢失时使用 json_normalize 函数

python - 我的 Django if 语句无法正常工作

python - Python中的数据分布

python - 将列表列表构建为 csv/Excel 的列和行

ubuntu - 如何在 pam_exec 中获取 SSH 身份验证使用的方法?

linux - Shell 脚本 - SSH

git - 为什么我需要 SSH 授权才能克隆公开可用的 Git 存储库?