求助:在Databricks中通过ADLS Gen2的CSV特定列创建文件夹
Databricks读取ADLS Gen2 CSV特定列并创建对应文件夹的Python实现
问题背景
已通过账户密钥/SAS令牌完成ADLS Gen2到Databricks的挂载(挂载代码:dbutils.fs.mount( source = 'path', mount_point = '/mnt/...', extra_configs = {path,accountkey})),可正常读取CSV文件,但无法通过挂载点创建文件夹,需实现以下功能:
- 读取ADLS Gen2中CSV文件的指定列
- 根据列中唯一值在ADLS Gen2对应路径创建文件夹
解决方案代码
1. 验证挂载点可用性
先确认挂载路径可正常访问:
# 列出挂载点下的内容,验证挂载状态 dbutils.fs.ls("/mnt/your_mount_point")
2. 读取CSV文件的特定列
假设需提取的列名为folder_name,读取并去重:
# 读取CSV文件,指定表头和自动推断Schema df = spark.read.csv( "/mnt/your_mount_point/path/to/target_file.csv", header=True, inferSchema=True ) # 选择目标列并去重,避免重复创建文件夹 unique_folder_list = df.select("folder_name").distinct().collect()
3. 遍历创建文件夹
使用dbutils.fs.mkdirs创建文件夹(该方法会自动创建父目录,已存在时不会抛出异常):
# 定义文件夹的父路径(挂载点下的目标根目录) parent_folder_path = "/mnt/your_mount_point/your_target_root/" # 遍历唯一文件夹名称,逐个创建 for row in unique_folder_list: folder_name = row.folder_name full_path = f"{parent_folder_path}{folder_name}" # 创建文件夹 dbutils.fs.mkdirs(full_path) print(f"文件夹创建完成:{full_path}")
常见问题排查
- 确认挂载时使用的账户密钥/SAS令牌拥有写入权限:若使用服务 principal,需分配
Storage Blob Data Contributor角色;若使用SAS令牌,需包含Create权限 - 检查挂载点路径、CSV文件路径、目标文件夹路径的拼写是否正确
- 若列值包含特殊字符,需提前处理(比如替换
/等路径非法字符)
内容的提问来源于stack exchange,提问作者shruti thakar
相关产品推荐
相关产品推荐

