You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python远程读取服务器上的AVRO文件

直接通过SFTP远程读取AVRO文件

可以直接结合Paramiko的SFTP文件对象与FastAvro的读取功能实现远程读取,无需将文件下载到本地。因为FastAvro的reader()方法支持接收类文件对象,而Paramiko的SFTP打开文件后返回的对象正好符合这个要求。

完整实现代码如下:

from fastavro import reader
import paramiko

avro_records = []

# 建立SSH连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=myHostname, username=myUsername, password=myPassword)

try:
    # 打开SFTP会话
    sftp = ssh.open_sftp()
    # 以二进制只读模式打开远程AVRO文件
    with sftp.open('/remotedir/avro/file.avro', 'rb') as remote_fo:
        # 用FastAvro读取远程文件对象
        avro_reader = reader(remote_fo)
        for record in avro_reader:
            avro_records.append(record)
finally:
    # 确保关闭SSH连接
    ssh.close()

关键说明:

  • 使用sftp.open()替代本地的open()方法,返回的remote_fo是一个支持随机访问的类文件对象,完全兼容FastAvro的读取要求。
  • 若使用Paramiko 2.7及以上版本,可通过嵌套with语句自动管理连接与文件资源,简化代码:
from fastavro import reader
import paramiko

avro_records = []

# 使用with语句自动管理SSH连接
with paramiko.SSHClient() as ssh:
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=myHostname, username=myUsername, password=myPassword)
    
    with ssh.open_sftp() as sftp:
        with sftp.open('/remotedir/avro/file.avro', 'rb') as remote_fo:
            avro_reader = reader(remote_fo)
            for record in avro_reader:
                avro_records.append(record)

内容的提问来源于stack exchange,提问作者Amir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:12:18