如何用Python从Azure ML Data store URI创建临时未注册数据资产
用Python实现Azure ML临时未注册数据资产(合并多文件夹文件)
以下代码可实现与Azure ML GUI一致的功能:从已连接的ADLS Blob数据存储中读取多文件夹文件并合并,创建临时未注册的数据资产(仅在当前Notebook会话有效,无需注册到工作区)。
步骤与代码
1. 初始化工作区连接
先在Notebook中连接到你的Azure ML工作区:
from azureml.core import Workspace, Datastore, Dataset from azureml.data.datapath import DataPath # 加载工作区配置(默认读取Notebook所在环境的config.json) ws = Workspace.from_config()
2. 获取目标ADLS数据存储
指定你已连接的ADLS Blob容器数据存储名称:
# 替换为你的数据存储名称 datastore = Datastore.get(ws, datastore_name="your_adls_datastore_name")
3. 定义要合并的文件路径
添加需要合并的文件夹路径,支持通配符匹配文件夹下所有文件:
# 示例:指定两个文件夹下的所有CSV文件,可根据实际路径调整 file_paths = [ DataPath(datastore, "data/folder1/*"), DataPath(datastore, "data/folder2/*") ]
4. 创建未注册数据集并合并文件
通过挂载(大文件推荐)或下载方式读取文件,合并后生成临时数据资产:
# 创建未注册的FileDataset,指向目标文件路径 raw_dataset = Dataset.File.from_files(path=file_paths) # 挂载数据集到临时路径(避免大文件下载占用本地空间) mount_context = raw_dataset.mount() mount_context.start() # 合并所有文件(以CSV为例,其他格式需调整读取逻辑) import pandas as pd import os combined_data = pd.DataFrame() for root, _, files in os.walk(mount_context.mount_point): for file in files: file_full_path = os.path.join(root, file) df = pd.read_csv(file_full_path) combined_data = pd.concat([combined_data, df], ignore_index=True) # 保存合并后的临时文件 temp_file_path = "./temp_combined_data.csv" combined_data.to_csv(temp_file_path, index=False) # 基于临时文件创建未注册的临时数据资产 temp_data_asset = Dataset.File.from_files(path=[temp_file_path]) # 验证:读取临时数据资产内容 sample_df = temp_data_asset.to_pandas_dataframe() print(sample_df.head())
5. 清理资源
使用完成后释放挂载并删除临时文件:
# 停止挂载 mount_context.stop() # 删除本地临时文件 import os os.remove(temp_file_path)
关键说明
- 未注册特性:全程未调用
dataset.register()方法,因此该数据资产仅存在于当前Notebook会话中,会话结束后自动失效,无需手动删除注册记录。 - 格式适配:如果是Parquet、JSON等其他格式,只需调整文件读取(
pd.read_parquet等)和保存的代码逻辑即可。 - 性能优化:大文件场景优先使用挂载方式;小文件可直接用
raw_dataset.download(target_path="./temp_files")下载后合并。
内容的提问来源于stack exchange,提问作者khemanth958
相关产品推荐
相关产品推荐

