1

我想处理存储在 Azure Data Lake Storage(第 1 代)中的大型表,首先在它们上运行 U-SQL 脚本,然后是 Python 脚本,最后输出结果。

从概念上讲,这非常简单:

  1. 运行 .usql 脚本以intermediate_1intermediate_2一个大的initial_table
  2. 在中间数据上运行 Python 脚本以生成最终结果final

执行此操作的 Azure 机器学习管道步骤应该是什么?

我认为以下计划可行:

  1. adla_compute使用AdlaSteplike 在 a 上运行 .usql 查询

    int_1 = PipelineData("intermediate_1", datastore=adls_datastore)
    int_2 = PipelineData("intermediate_2", datastore=adls_datastore)
    
    adla_step = AdlaStep(script_name='script.usql',
                         source_directory=sample_folder,
                         inputs=[initial_table],
                         outputs=[intermediate_1, intermediate_2],
                         compute_target=adla_compute)          
    
  2. 在计算目标上运行 Python 步骤,aml_compute例如

    python_step = PythonScriptStep(script_name="process.py",
                                   arguments=["--input1", intermediate_1, "--input2", intermediate_2, "--output", final],
                                   inputs=[intermediate_1, intermediate_2],
                                   outputs=[final],    
                                   compute_target=aml_compute, 
                                   source_directory=source_directory)
    

但是,这在 Python 步骤中失败,并出现此类错误

StepRun(process.py) 执行总结

=======================================
StepRun(process.py) 状态:失败

无法装载数据存储 mydatastore,因为它没有指定存储帐户密钥。

我真的不明白抱怨“mydatastore”的错误,该名称与adls_datastore我运行 U-SQL 查询的 Azure Data Lake 数据存储引用相关联。

如果我在这里做错了什么,有人能闻到吗?我应该将中间数据(和intermediate_1intermediate_2移动到存储帐户,例如DataTransferStepPythonScriptStep

4

2 回答 2

1

ADLS 不支持挂载。所以,你是对的,你必须先使用 DataTransferStep 将数据移动到 blob。

于 2019-08-05T20:52:02.257 回答
1

AML 计算不支持 Data Lake 存储。此表列出了不同的计算及其对不同数据存储的支持级别:https ://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-access-data#compute-and-datastore-矩阵

您可以使用DataTransferStep将数据从 ADLS 复制到 blob,然后将该 blob 用作PythonScriptStep. 示例笔记本:https ://github.com/Azure/MachineLearningNotebooks/blob/master/how-to-use-azureml/machine-learning-pipelines/intro-to-pipelines/aml-pipelines-data-transfer.ipynb


# register blob datastore, example in linked notebook
# blob_datastore = Datastore.register_azure_blob_container(...

int_1_blob = DataReference(
    datastore=blob_datastore,
    data_reference_name="int_1_blob",
    path_on_datastore="int_1")

copy_int_1_to_blob = DataTransferStep(
    name='copy int_1 to blob',
    source_data_reference=int_1,
    destination_data_reference=int_1_blob,
    compute_target=data_factory_compute)

int_2_blob = DataReference(
    datastore=blob_datastore,
    data_reference_name="int_2_blob",
    path_on_datastore="int_2")

copy_int_2_to_blob = DataTransferStep(
    name='copy int_2 to blob',
    source_data_reference=int_2,
    destination_data_reference=int_2_blob,
    compute_target=data_factory_compute)

# update PythonScriptStep to use blob data references
python_step = PythonScriptStep(...
                               arguments=["--input1", int_1_blob, "--input2", int_2_blob, "--output", final],
                               inputs=[int_1_blob, int_2_blob],
                               ...)
于 2019-08-15T23:24:26.853 回答