如何在 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')
其中 ws
是 azureml.Workspace
对象,data
是 pandas.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 是如何实现它的,我发现了这个:
这是一个 post content-length=0 到 https://studioapi.azureml.net/api/resourceuploads/workspaces/<workspace_id>/?userStorage=true&dataTypeId=GenericCSV
的请求,这将 return 响应主体中的一个 id。
将 .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。
如果您认为它太复杂,请将问题报告给 this。 azureml 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/
我使用下一个命令保存输出结果:
ws.datasets.add_from_dataframe(data, 'GenericCSV', 'output.csv', 'Uotput results')
其中 ws
是 azureml.Workspace
对象,data
是 pandas.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 是如何实现它的,我发现了这个:
这是一个 post content-length=0 到
https://studioapi.azureml.net/api/resourceuploads/workspaces/<workspace_id>/?userStorage=true&dataTypeId=GenericCSV
的请求,这将 return 响应主体中的一个 id。将 .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。
如果您认为它太复杂,请将问题报告给 this。 azureml 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/