如何用Python从Databricks共享文件至Windows文件共享路径(报错求助)
解决Databricks中使用ftplib上传文件到Windows共享时的“connection reused”错误
我尝试使用以下Python代码将文件从Databricks共享至Windows文件共享路径,但出现“connection reused”错误。代码如下:
import ftplib ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) # force UTF-8 encoding ftp_server.encoding = "utf-8" # Enter File Name with Extension filename = "file1.csv" # Read file in binary mode with open(filename, "rb") as file: # Command for Uploading the file "STOR filename" ftp_server.storbinary(f"STOR {filename}", file) # Get list of files ftp_server.dir() # Close the Connection ftp_server.quit()
我已尝试上述方案,但仍遇到该错误。
可能的解决方案:
- 显式拆分连接,避免复用冲突
ftplib执行storbinary、dir等操作时会创建独立数据连接,未正确释放时易触发复用错误。可以拆分操作,每次使用新连接:
import ftplib # 上传文件的连接 ftp_upload = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) ftp_upload.encoding = "utf-8" filename = "file1.csv" with open(filename, "rb") as file: ftp_upload.storbinary(f"STOR {filename}", file) ftp_upload.quit() # 查询目录的新连接 ftp_list = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) ftp_list.dir() ftp_list.quit()
- 强制启用FTP被动模式
Windows FTP服务通常要求被动模式,默认ftplib的主动模式可能导致连接异常。添加被动模式配置:
ftp_server = ftplib.FTP(HOSTNAME, USERNAME, PASSWORD) ftp_server.encoding = "utf-8" ftp_server.set_pasv(True) # 启用被动模式
- 设置连接超时,清理闲置连接
初始化FTP连接时指定超时时间,防止长期闲置的连接被误复用:
ftp_server = ftplib.FTP(timeout=20) ftp_server.connect(HOSTNAME) ftp_server.login(USERNAME, PASSWORD) ftp_server.encoding = "utf-8"
检查Databricks网络权限
Databricks集群的出站防火墙可能限制了FTP数据端口(默认被动模式使用1024-65535范围端口),联系管理员确认集群所在网络已开放FTP控制端口(21)及对应数据端口范围。验证文件与目录权限
确保Databricks集群能读取本地的file1.csv,同时Windows共享目录具备写入权限——权限不足导致的连接中断,也可能触发“connection reused”错误。
内容的提问来源于stack exchange,提问作者Sonia Sarkar
相关产品推荐
相关产品推荐

