我使用next命令保存输出结果:
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,则非常不方便。
答案 0 :(得分:4)
我已经阅读了python包 azureml 中的源代码,发现他们在上传数据集时使用了一个简单的请求帖子,该数据集的内容长度有限,为4194304字节。
我试图修改内部代码" http.py"在python包中 azureml 。我发布了一个带有分块数据的请求,我收到了以下错误:
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工作室如何实现这一点,我发现了这个:
它将content-length = 0的请求发布到https://studioapi.azureml.net/api/resourceuploads/workspaces/<workspace_id>/?userStorage=true&dataTypeId=GenericCSV
,这将在响应正文中返回一个id。
将.csv文件分成小于4194304字节的块,并将它们发布到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包仍处于开发阶段,因此您的建议对他们非常有帮助。
答案 1 :(得分:0)
根据Github上的AzureML项目,Workspace
对象ws
通过Azure资源管理的HTTP请求工作。因此,您的代码是资源管理器API请求。错误AzureMLHttpError
是由于超出Azure Resource Manager API请求大小的限制而引起的。最大限制大小为 4194304字节。
您可以在文档Azure subscription and service limits, quotas, and constraints
的Subscription limits - Azure Resource Manager
部分找到它,请参阅下图。
答案 2 :(得分:0)
Alexey,您可以写信给Azure Blob存储,但我发现这样做的方法非常稀少。
https://azure.microsoft.com/en-us/documentation/articles/storage-python-how-to-use-blob-storage/