如何在 Azure ML Studio 中保存来自 ipython notebook 的数据集?

How could I save dataset from ipython notebook in Azure ML Studio?

我使用下一个命令保存输出结果:

ws.datasets.add_from_dataframe(data, 'GenericCSV', 'output.csv', 'Uotput results')

其中 wsazureml.Workspace 对象,datapandas.DataFrame

如果我的数据集大小小于 4 mb,它工作正常。否则我得到一个错误:

AzureMLHttpError: Maximum request length exceeded.

据我了解,这是 Azure 环境限制引发的错误,无法更改数据集的最大大小。

我可以将我的数据集拆分为 4 mb 的部分并从 Azure ML studio 下载它们,但是如果我的输出数据集的大小超过 400 mb 就非常不方便。

我阅读了python包azureml中的源代码,发现他们在上传数据集时使用了一个简单的请求post , 内容长度限制为 4194304 字节。

我尝试修改 python 包 azureml 中 "http.py" 内的代码。我 post 使用分块数据编辑请求,但出现以下错误:

Traceback (most recent call last):
  File ".\azuremltest.py", line 10, in <module>
    ws.datasets.add_from_dataframe(frame, 'GenericCSV', 'output2.csv', 'Uotput results')
  File "C:\Python34\lib\site-packages\azureml\__init__.py", line 507, in add_from_dataframe
    return self._upload(raw_data, data_type_id, name, description)
  File "C:\Python34\lib\site-packages\azureml\__init__.py", line 550, in _upload
raw_data, None)
  File "C:\Python34\lib\site-packages\azureml\http.py", line 135, in upload_dataset
    upload_result = self._send_post_req(api_path, raw_data)
  File "C:\Python34\lib\site-packages\azureml\http.py", line 197, in _send_post_req
    raise AzureMLHttpError(response.text, response.status_code)
azureml.errors.AzureMLHttpError: Chunked transfer encoding is not permitted. Upload size must be indicated in the Content-Length header.
Request ID: 7b692d82-845c-4106-b8ec-896a91ecdf2d 2016-03-14 04:32:55Z

azureml 包中的 REST API 不支持分块传输编码。因此,我看了一下 Azure ML studio 是如何实现它的,我发现了这个:

  1. 这是一个 post content-length=0 到 https://studioapi.azureml.net/api/resourceuploads/workspaces/<workspace_id>/?userStorage=true&dataTypeId=GenericCSV 的请求,这将 return 响应主体中的一个 id。

  2. 将 .csv 文件分成小于 4194304 字节的块,并将它们 post 分成 https://studioapi.azureml.net/api/blobuploads/workspaces/<workspace_id>/?numberOfBlocks=<the number of chunks>&blockId=<index of chunk>&uploadId=<the id you get from previous request>&dataTypeId=GenericCSV

如果你真的想要这个功能,你可以用python和上面的REST实现它API。

如果您认为它太复杂,请将问题报告给 thisazureml python 包还在开发中,所以你的建议对他们很有帮助。

根据 Github 上的 AzureML 项目,Workspace 对象 ws 通过 Azure 资源管理的 HTTP 请求工作。所以你的代码是一个资源管理器 API 请求。错误 AzureMLHttpError 是由于超过 Azure 资源管理器 API 请求大小的限制引起的。最大限制大小为 4194304 字节

您可以在文档Subscription limits - Azure Resource Manager部分找到它Azure subscription and service limits, quotas, and constraints,请看下图。

Alexey,您可以写入 Azure Blob 存储,但我发现执行此操作的方法记录很少。

https://azure.microsoft.com/en-us/documentation/articles/storage-python-how-to-use-blob-storage/