如何从Databricks的ADLS挂载点读取文件为字节串
问题根因
Databricks 中/mnt开头的挂载路径属于 Databricks 文件系统(DBFS)的虚拟路径,Python 原生open函数默认访问的是集群计算节点的本地文件系统,二者不互通。只有 DBFS 下的/tmp目录默认同步挂载到了节点本地的/tmp路径,所以直接读取/mnt下的文件会报不存在错误。
可用实现方案
方案1:复制到本地临时目录读取(最简便)
先将DBFS挂载点的文件复制到节点本地/tmp目录,再用原生open读取:
# 把DBFS文件复制到本地临时目录 dbutils.fs.cp("/mnt/ftd/TruthTable.csv", "file:/tmp/TruthTable.csv") # 用原生open读取字节串 with open("/tmp/TruthTable.csv", "rb") as f: byte_content = f.read()
方案2:用Spark binaryFiles直接读取(无需临时文件)
适合不需要落地临时文件的场景,直接通过Spark读取为字节串:
# 读取二进制文件,返回的RDD元素为(文件路径, 字节内容) binary_rdd = sc.binaryFiles("/mnt/ftd/TruthTable.csv") # 提取字节内容 byte_content = binary_rdd.collect()[0][1]
方案3:通过Azure Storage SDK直接读取(无需依赖DBFS挂载)
如果不想依赖DBFS挂载,可直接调用ADLS的SDK读取对应存储账户的文件,需要提前配置好存储账户的访问认证:
from azure.storage.blob import BlobClient from azure.identity import DefaultAzureCredential blob_url = "abfss://ftd@omitted.dfs.core.windows.net/TruthTable.csv" # 初始化Blob客户端,用集群托管身份认证即可 blob_client = BlobClient.from_blob_url(blob_url, credential=DefaultAzureCredential()) # 直接下载为字节串 byte_content = blob_client.download_blob().readall()
内容的提问来源于stack exchange,提问作者Filip Markoski
相关产品推荐
相关产品推荐

