如何正确写入 Azure PipelineData?

how to write to Azure PipelineData properly?

我正在尝试学习 Azure,但运气不佳(目前)。当配置为“上传”模式时,所有教程都将 PipelineData 用作文件。但是,我收到“FileNotFoundError:[Errno 2] 没有这样的文件或目录:''”错误。我很想问一个更具体的问题,但我就是看不出我做错了什么。

from azureml.core import Workspace, Datastore,Dataset,Environment
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
from azureml.pipeline.steps import PythonScriptStep
from azureml.pipeline.core import Pipeline, PipelineData
import os

ws = Workspace.from_config()
datastore = ws.get_default_datastore()

compute_name = "cpucluster"
compute_target = ComputeTarget(workspace=ws, name=compute_name)
aml_run_config = RunConfiguration()
aml_run_config.target = compute_target
aml_run_config.environment.python.user_managed_dependencies = False
aml_run_config.environment.python.conda_dependencies = CondaDependencies.create(
    conda_packages=['pandas','scikit-learn'], 
    pip_packages=['azureml-sdk', 'azureml-dataprep[fuse,pandas]'], 
    pin_sdk_version=False)

output1 = PipelineData("processed_data1",datastore=datastore, output_mode="upload")
prep_step = PythonScriptStep(
    name="dataprep",
    script_name="dataprep.py",
    source_directory=os.path.join(os.getcwd(),'dataprep'),
    arguments=["--output", output1],
    outputs = [output1],
    compute_target=compute_target,
    runconfig=aml_run_config,
    allow_reuse=True
)

在 dataprep.py 我有以下内容:

import numpy, argparse, pandas
from azureml.core import Run
run = Run.get_context()
parser = argparse.ArgumentParser()
parser.add_argument('--output', dest='output', required=True)
args = parser.parse_args()
df = pandas.DataFrame(numpy.random.rand(100,3))
df.iloc[:, 2] = df.iloc[:,0] + df.iloc[:,1]
print(df.iloc[:5,:])
df.to_csv(args.output)

所以,是的。 pd 应该写入输出,但我的计算集群表示如下:

"User program failed with FileNotFoundError: [Errno 2] No such file or directory: ''\".

当我不包含 to_csv() 函数时,集群不会抱怨

这是 PRS 的 examplePipelineData 旨在表示从一步到下一步的“瞬态”数据,而 OutputDatasetConfig 旨在捕获数据集的最终状态(因此您会看到沿袭、ADLS 支持等功能)。 PipelineData 始终以类似 {run_id}{output_name} 的文件夹结构输出数据。 OutputDatasetConfig 允许将数据与 运行 分离,因此它允许您控制将数据放置在何处(尽管默认情况下它会产生类似的文件夹结构)。 OutputDatasetConfig 甚至允许将输出注册为数据集,在这种情况下摆脱这种文件夹结构是有意义的。从文档本身:“表示如何复制 运行 的输出并提升为 FileDataset。OutputFileDatasetConfig 允许您指定如何将计算目标上的特定本地路径上传到指定目的地".

OutFileDatasetConfig 是一个控制平面概念,用于在流水线步骤之间传递数据。