如何在Azure ML Studio中保存ipython笔记本中的数据集?

时间:2016-03-13 17:11:28

标签: python azure cortana-intelligence azure-machine-learning-studio

我使用next命令保存输出结果:

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,则非常不方便。

3 个答案:

答案 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工作室如何实现这一点,我发现了这个:

  1. 它将content-length = 0的请求发布到https://studioapi.azureml.net/api/resourceuploads/workspaces/<workspace_id>/?userStorage=true&dataTypeId=GenericCSV,这将在响应正文中返回一个id。

  2. 将.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

  3. 如果您真的想要这个功能,可以使用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 constraintsSubscription limits - Azure Resource Manager部分找到它,请参阅下图。

enter image description here

答案 2 :(得分:0)

Alexey,您可以写信给Azure Blob存储,但我发现这样做的方法非常稀少。

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