同一订阅内从Azure Machine Learning访问OneLake的方法及瓶颈咨询
关于Azure ML访问OneLake数据的问题解答
1. 是否可在同一订阅内的Azure ML实例中访问OneLake的数据(文件或表)?
可以,同一订阅内的Azure ML实例完全能够访问OneLake中的文件和表数据。OneLake支持ADLS Gen2兼容的访问协议,可与Azure ML生态无缝对接。
2. 具体操作方式
方式一:通过ADLS Gen2兼容路径访问文件
OneLake提供ADLS Gen2兼容的访问端点,路径格式为:abfss://<Fabric工作区名称>@onelake.dfs.fabric.microsoft.com/<湖屋名称>/<具体文件夹/文件路径>
操作步骤:
- 权限配置:为Azure ML的托管身份(如工作区托管身份、计算集群的托管身份)在Fabric工作区及目标湖屋中分配数据读取者或参与者权限。
- Python SDK读取示例:
from azure.identity import DefaultAzureCredential from azure.storage.filedatalake import DataLakeServiceClient import pandas as pd # 初始化身份验证 credential = DefaultAzureCredential() # 连接OneLake的ADLS Gen2端点 service_client = DataLakeServiceClient( account_url="https://onelake.dfs.fabric.microsoft.com", credential=credential ) # 获取对应工作区、湖屋的文件系统和目录客户端 file_system_client = service_client.get_file_system_client(file_system="<你的Fabric工作区名称>") directory_client = file_system_client.get_directory_client("<你的湖屋名称>/<目标文件夹路径>") file_client = directory_client.get_file_client("<目标文件名>") # 读取文件并转为DataFrame(以CSV为例) download_stream = file_client.download_file() df = pd.read_csv(download_stream)
方式二:访问OneLake中的湖屋表
湖屋中的表本质是存储在OneLake中的结构化文件(如Parquet),可直接通过上述ADLS路径读取表对应的文件目录:
- 若使用Spark计算集群,直接通过Spark读取:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("ReadOneLakeTable").getOrCreate() # 湖屋表的路径格式:abfss://<工作区>@onelake.dfs.fabric.microsoft.com/<湖屋名称>/Tables/<表名> df = spark.read.parquet("abfss://<工作区名称>@onelake.dfs.fabric.microsoft.com/<湖屋名称>/Tables/<目标表名>")
3. 可能存在的瓶颈
- 跨区域传输延迟:如果Azure ML的计算资源与OneLake不在同一Azure区域,会产生跨区域数据传输的延迟和额外成本;同一区域下无需中间存储,数据传输效率接近本地存储。
- 权限配置复杂度:需要在Fabric和Azure ML两端协调托管身份的权限,若权限分配不当(如缺少数据读取权限)会导致访问失败,排查成本较高。
- 大数据读取性能:读取超大规模文件或表时,若未对数据进行分区、格式优化(如使用Parquet/ORC而非CSV),或Azure ML计算资源配置不足(如单节点计算),会出现读取速度慢的问题。
- 部分API兼容性限制:OneLake虽然兼容ADLS Gen2 API,但少数ADLS Gen2的高级特性(如某些存储生命周期策略)可能无法完全支持,需提前测试验证。
内容的提问来源于stack exchange,提问作者JBSH
相关产品推荐
相关产品推荐

