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

如何在Azure Databricks中使用Python连接Azure FTP文件夹、读取文件名并合并文本文件?

在Azure Databricks中通过Python连接共享文件夹并合并文本文件

针对你提到的连接\\VMAZR1\ABCDFiles共享文件夹、筛选文本文件并合并的需求,我整理了两种在Azure Databricks中可行的方案,帮你搞定连接和文件处理的问题:

方法1:将SMB共享挂载到DBFS(推荐)

把共享文件夹挂载到Databricks文件系统(DBFS)后,操作文件会像本地文件一样方便,适合长期使用。

1. 挂载共享文件夹

首先在Databricks笔记本中运行以下代码完成挂载,需要提供共享的认证信息(如果是匿名访问可以省略extra_configs):

# 挂载SMB共享到DBFS指定路径
dbutils.fs.mount(
  source = "smb://VMAZR1/ABCDFiles",
  mount_point = "/mnt/abcd_files",
  extra_configs = {
    "smb.username": "你的共享访问用户名",
    "smb.password": "你的共享访问密码"
  }
)

提示:如果是Azure Files存储账户的共享,source格式为smb://<存储账户名>.file.core.windows.net/<共享名>,用户名是存储账户名,密码是存储账户的访问密钥。

2. 筛选文本文件

挂载完成后,就可以快速列出并筛选出所有.txt格式的文件:

# 列出挂载路径下的所有文件对象
all_files = dbutils.fs.ls("/mnt/abcd_files")

# 筛选出后缀为.txt的文件,提取其完整路径
text_files = [file.path for file in all_files if file.name.lower().endswith(".txt")]

print(f"共找到 {len(text_files)} 个文本文件")

3. 合并文件并保存

结合你已有的合并能力,这里给出两种合并方式的示例:

方式A:用Spark处理(适合大文件)

# 读取所有文本文件为DataFrame
text_df = spark.read.text(text_files)

# 合并为单个文件(coalesce(1)将数据合并到一个分区,大文件建议先调整分区再处理)
text_df.coalesce(1).write.mode("overwrite").text("/mnt/abcd_files/merged_result.txt")

方式B:Python原生读取(适合小文件)

merged_content = ""

# 遍历所有文本文件,读取内容并合并
for file_path in text_files:
    # DBFS路径需要转换为本地可访问的路径,前缀加/dbfs/
    local_path = f"/dbfs{file_path}"
    with open(local_path, "r", encoding="utf-8") as f:
        merged_content += f.read() + "\n"  # 每个文件后加换行分隔

# 保存合并后的内容到共享文件夹
with open("/dbfs/mnt/abcd_files/merged_result.txt", "w", encoding="utf-8") as f:
    f.write(merged_content)

方法2:直接用Python的smbclient库连接(临时操作)

如果只是临时操作不想挂载共享,可以用smbclient库直接连接SMB共享。

1. 安装依赖库

先在笔记本中运行命令安装smbclient:

%pip install smbclient

2. 连接共享并筛选文本文件

import smbclient

# 配置共享连接参数
server_name = "VMAZR1"
share_name = "ABCDFiles"
username = "你的共享访问用户名"
password = "你的共享访问密码"

# 注册SMB会话,避免重复输入认证信息
smbclient.register_session(server_name, username=username, password=password)

# 列出共享下的所有文件
all_files = smbclient.listdir(f"\\\\{server_name}\\{share_name}")

# 筛选文本文件
text_files = [file for file in all_files if file.lower().endswith(".txt")]

print(f"共找到 {len(text_files)} 个文本文件")

3. 合并并保存文件

merged_content = ""

# 遍历读取每个文本文件内容
for file_name in text_files:
    file_path = f"\\\\{server_name}\\{share_name}\\{file_name}"
    with smbclient.open_file(file_path, "r", encoding="utf-8") as f:
        merged_content += f.read() + "\n"

# 保存合并后的文件到原共享位置
output_path = f"\\\\{server_name}\\{share_name}\\merged_result.txt"
with smbclient.open_file(output_path, "w", encoding="utf-8") as f:
    f.write(merged_content)

关键注意事项

  • 确保你的Databricks集群和VMAZR1服务器在同一个虚拟网络(VNet)中,或者防火墙已开放SMB协议的445端口,否则会无法连接。
  • 处理大文件时优先使用Spark方式,避免Python原生读取导致内存溢出。
  • 如果共享有特殊字符或权限限制,需要确认账户拥有足够的读写权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:09:08