Azure data factory 如何将数据路径PIPELINE参数从AzureDatafactory传递到AzureMachineLearningExecutePline活动?

Azure data factory 如何将数据路径PIPELINE参数从AzureDatafactory传递到AzureMachineLearningExecutePline活动?,azure-data-factory,azure-data-factory-2,azure-machine-learning-studio,azure-machine-learning-service,azureml,Azure Data Factory,Azure Data Factory 2,Azure Machine Learning Studio,Azure Machine Learning Service,Azureml,我正在尝试从Blob存储中读取文件,加载到pandas并将其写入Blob存储 我有一个Azure机器学习管道,其中包含一个PythonScriptStep,它接受2个PipelineParameters,数据路径如下所示 从azureml.core导入数据存储 从azureml.data.datapath导入数据路径、数据路径计算绑定、数据引用 从azureml.pipeline.core导入PipelineParameter 数据存储=数据存储(ws,“样本存储”) 在\u原始路径中\u默认

我正在尝试从Blob存储中读取文件,加载到pandas并将其写入Blob存储

  • 我有一个Azure机器学习管道,其中包含一个PythonScriptStep,它接受2个PipelineParameters,数据路径如下所示

    从azureml.core导入数据存储
    从azureml.data.datapath导入数据路径、数据路径计算绑定、数据引用
    从azureml.pipeline.core导入PipelineParameter
    数据存储=数据存储(ws,“样本存储”)
    在\u原始路径中\u默认值='somefolder/raw/alerts/2020/08/03/default\u in.csv'
    in_cleaned_path_default='somefolder/cleaned/alerts/2020/08/03/default_out.csv'
    in_raw_datapath=datapath(datastore=datastore,path_on_datastore=in_raw_path默认值)
    in_raw\u path\u pipelineparam=PipelineParameter(name=“inrawpath”,默认值=in_raw\u datapath)
    原始数据路径输入=(在原始路径管道参数中,数据路径计算绑定(mode='mount'))
    in_cleaned_datapath=datapath(datastore=datastore,path_on_datastore=in_cleaned_path默认值)
    in_cleaned_path_pipelineparam=PipelineParameter(name=“incleanedpath”,默认值=in_cleaned_datapath)
    已清理的\u数据路径\u输入=(在\u已清理的\u路径\u管道参数中,DataPathComputeBinding(mode='mount'))
    从azureml.pipeline.steps导入PythonScriptStep
    source\u directory=script\u folder+'/pipeline\u Steps'
    dataprep_步骤=PythonScriptStep(
    script_name=“SimpleTest.py”,
    参数=[“--input_data”,raw_datapath_input,“--cleaned_data”,cleaned_datapath_input],
    输入=[原始数据路径输入,清洁数据路径输入],
    计算目标=默认计算,
    source\u directory=source\u directory,
    runconfig=run\u config,
    允许重用=真
    )
    来自azureml.pipeline.core导入管道
    管道测试=管道(工作区=ws,步骤=[dataprep\u步骤])
    test_raw_path=DataPath(datastore=datastore,path_on_datastore='samplefolder/raw/alerts/2017/05/31/test.csv')
    测试_cleaned_path=DataPath(datastore=datastore,path_on_datastore='samplefolder/cleaned/alerts/2020/09/03')
    pipeline_run_msalerts=实验(ws,'SampleExperiment')。提交(pipeline_测试,pipeline_参数={“inrawpath”:测试_原始_路径,
    “incleanedpath”:测试(路径)```
    
  • 这是使用的脚本(SimpleTest.py):

    导入操作系统
    导入系统
    导入argparse
    导入路径库
    导入azureml.core
    作为pd进口熊猫
    parser=argparse.ArgumentParser(“dataprepolly”)
    parser.add_参数(“--input_data”,type=str)
    add_参数(“--cleaned_data”,type=str)
    args=parser.parse_args()
    打印(“参数1:%s”%args.input\u数据)
    打印(“参数2:%s”%args.u数据)
    testDf=pd.read\u csv(args.input\u数据,错误\u错误\u行=False)
    打印('总数据形状'+str(testDf.Shape))
    如果不是(args.u数据为无):
    输出路径=args.cleaned\u数据
    makedirs(输出路径,exist\u ok=True)
    outdatapath=output_path+'/alert.csv'
    testDf.to_csv(outdatapath,index=False)
    
    从AzureDataFactory触发此AzureMLPipeline:
    通过在AzureMLWorkspace/PipelineSDK中执行ML管道,上述代码可以正常工作。我正在尝试从AzureDataFactory(AzureMachineLearningExecutePline)触发AzureMLpipeline活动,如下所示

    通过传递2个字符串输入路径,尝试了如下调试运行
    rawdatapath=“samplefolder/raw/alerts/2017/05/31/test.csv”
    cleaneddatapath=“samplefolder/raw/cleaned/2020/09/03/”

    它显示采用默认路径而不是管道参数(没有这样的文件或目录错误不那么重要,因为主要的一点是采用默认路径而不是管道参数)。我怀疑这是因为将pipelineparameter作为字符串而不是数据路径传递。


    最后一个问题是:如何从Azure数据工厂向AzureMLPipelineActivity传递数据路径



    谢谢。

    输入参数似乎定义为字符串,请尝试将其修改为对象数据类型。根据,它需要一个对象 {“键”:“值”}参数

    演示了在AML管道中使用
    DataPath
    PipelineParameters
    。您将了解如何通过
    PipelineParameters
    参数化字符串和
    DataPath
    ,并将其提交给AML管道。您可以参数化输入数据集,下面是一个笔记本,演示了如何进行参数化

    目前,
    ParallelRunStep
    接受数据集作为数据输入。您可以在
    ParallelRunStep
    之前再添加一个步骤,以创建指向新数据的数据集对象,并传递到
    ParallelRunStep
    。以下是使用多个步骤的示例:

    对于输出,如果使用
    append_row
    output操作,则可以通过
    append_row_file_name
    config自定义输出文件名。输出将存储在默认blob中。要将其移动到其他存储,我们建议在
    ParallelRunStep
    之后使用另一个
    DataTransferStep

    请按照以下步骤进行数据传输:

    从Microsoft获得答案(请参阅此线程)。Azure Data Factory产品团队确认,Azure Data Factory(ADF)中目前不支持“DataPath”参数的数据类型。但是,已经针对该功能提出了一个功能,并且正在进行相关工作。此功能将作为11月发布的一部分。

    Hey@KranthiPakala MSFT,感谢您的回复。请您澄清数据类型必须在哪里?1.“SimpleTest.py”中的参数应该是str还是object?2.Azureml管道是否有任何变化?3.在ADF AzureML管道活动中,尝试将路径作为对象传递,但AzureML管道仍然选择默认值而不是传递的参数。我应该使用getmetada活动来创建对象还是仅创建一个对象
    Current directory:  /mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/workspaceblobstore/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade
    Preparing to call script [ SimpleTest.py ] 
    with arguments:
     ['--input_data', '/mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/SampleStore/somefolder/raw/alerts/2020/08/03/default_in.csv',
     '--cleaned_data', '/mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/SampleStore/somefolder/cleaned/alerts/2020/08/03/default_out.csv']
    After variable expansion, calling script [ SimpleTest.py ] with arguments:
     ['--input_data', '/mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/SampleStore/somefolder/raw/alerts/2020/08/03/default_in.csv',
     '--cleaned_data', '/mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/SampleStore/somefolder/cleaned/alerts/2020/08/03/default_out.csv']
    
    Script type = None
    Argument 1: /mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/SampleStore/somefolder/raw/alerts/2020/08/03/default_in.csv
    Argument 2: /mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/SampleStore/somefolder/cleaned/alerts/2020/08/03/default_out.csv
    .......................
    FileNotFoundError: [Errno 2] No such file or directory: '/mnt/batch/tasks/shared/LS_root/jobs/myazuremlworkspace/azureml/d8ee11ea-5838-46e5-a8ce-da2fbff5aade/mounts/SampleStore/somefolder/raw/alerts/2020/08/03/default_in.csv'