Azure ML実験は、Reader
とWriter
モジュールを使用して、AzureブロブストレージにCSVファイルを読み書きする方法を提供します。しかし、JSONファイルをBLOBストレージに書き込む必要があります。それを行うモジュールがないので、私はExecute Python Script
モジュール内からそうしようとしています。Azure ML実験からAzureブログストレージにアクセスする
# Import the necessary items
from azure.storage.blob import BlobService
def azureml_main(dataframe1 = None, dataframe2 = None):
account_name = 'mystorageaccount'
account_key='mykeyhere=='
json_string='{jsonstring here}'
blob_service = BlobService(account_name, account_key)
blob_service.put_block_blob_from_text("upload","out.json",json_string)
# Return value must be of a sequence of pandas.DataFrame
return dataframe1,
しかし、これはエラーになります:ImportError: No module named azure.storage.blob
これはazure-storage
Pythonパッケージは、AzureのMLにインストールされていないことを意味します。
Azure ML Experimentの内部からAzureブロブストレージに書き込むにはどうすればよいですか?
Error 0085: The following error occurred during script evaluation, please view the output log for more information:
---------- Start of error message from Python interpreter ----------
data:text/plain,Caught exception while executing function: Traceback (most recent call last):
File "C:\server\invokepy.py", line 162, in batch
mod = import_module(moduleName)
File "C:\pyhome\lib\importlib\__init__.py", line 37, in import_module
__import__(name)
File "C:\temp\azuremod.py", line 19, in <module>
from azure.storage.blob import BlobService
ImportError: No module named azure.storage.blob
---------- End of error message from Python interpreter ----------
Start time: UTC 02/06/2016 17:59:47
End time: UTC 02/06/2016 18:00:00`
おかげで、誰も:
ここフィルエラーメッセージです!
更新:DanとPeterに感謝の意を表します。これは私がこれらの推奨事項を使って進歩したことです。私はきれいなPython 2.7仮想環境(VS 2005)を作成し、pip install azure-storage
を実行して、自分のサイトパッケージディレクトリに依存関係を取得しました。私はその後、サイトパッケージのフォルダを圧縮し、Zipファイルとしてアップロードしました。その後、サイトパッケージディレクトリへの参照を含め、必要な項目を正常にインポートしました。これにより、ブログストレージに書き込むときにタイムアウトエラーが発生しました。ここで
私のコードです:
# Get access to the uploaded Python packages
import sys
packages = ".\Script Bundle\site-packages"
sys.path.append(packages)
# Import the necessary items from packages referenced above
from azure.storage.blob import BlobService
from azure.storage.queue import QueueService
def azureml_main(dataframe1 = None, dataframe2 = None):
account_name = 'mystorageaccount'
account_key='p8kSy3F...elided...3plQ=='
blob_service = BlobService(account_name, account_key)
blob_service.put_block_blob_from_text("upload","out.txt","Test to write")
# All of the following also fail
#blob_service.create_container('images')
#blob_service.put_blob("upload","testme.txt","foo","BlockBlob")
#queue_service = QueueService(account_name, account_key)
#queue_service.create_queue('taskqueue')
# Return value must be of a sequence of pandas.DataFrame
return dataframe1,
そして、ここでは、新しいエラーログです:私の現在の探査をリードして
Error 0085: The following error occurred during script evaluation, please view the output log for more information:
---------- Start of error message from Python interpreter ----------
data:text/plain,C:\pyhome\lib\site-packages\requests\packages\urllib3\util\ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Caught exception while executing function: Traceback (most recent call last):
File "C:\server\invokepy.py", line 169, in batch
odfs = mod.azureml_main(*idfs)
File "C:\temp\azuremod.py", line 44, in azureml_main
blob_service.put_blob("upload","testme.txt","foo","BlockBlob")
File ".\Script Bundle\site-packages\azure\storage\blob\blobservice.py", line 883, in put_blob
self._perform_request(request)
File ".\Script Bundle\site-packages\azure\storage\storageclient.py", line 171, in _perform_request
resp = self._filter(request)
File ".\Script Bundle\site-packages\azure\storage\storageclient.py", line 160, in _perform_request_worker
return self._httpclient.perform_request(request)
File ".\Script Bundle\site-packages\azure\storage\_http\httpclient.py", line 181, in perform_request
self.send_request_body(connection, request.body)
File ".\Script Bundle\site-packages\azure\storage\_http\httpclient.py", line 143, in send_request_body
connection.send(request_body)
File ".\Script Bundle\site-packages\azure\storage\_http\requestsclient.py", line 81, in send
self.response = self.session.request(self.method, self.uri, data=request_body, headers=self.headers, timeout=self.timeout)
File "C:\pyhome\lib\site-packages\requests\sessions.py", line 464, in request
resp = self.send(prep, **send_kwargs)
File "C:\pyhome\lib\site-packages\requests\sessions.py", line 576, in send
r = adapter.send(request, **kwargs)
File "C:\pyhome\lib\site-packages\requests\adapters.py", line 431, in send
raise SSLError(e, request=request)
SSLError: The write operation timed out
---------- End of error message from Python interpreter ----------
Start time: UTC 02/10/2016 15:33:00
End time: UTC 02/10/2016 15:34:18
は依存性があるということですrequests
azure-storage
のPythonパッケージ。 requests
には、より新しいSSLプロトコルを呼び出すPython 2.7の既知のバグがあります。わかりませんが、私は今その地域を掘り起こしています。
更新2:このコードは、Python 3 Jupyterノートブックの内部で完璧に動作します。さらに、Blobコンテナを公開アクセスにすると、コンテナからURLを直接読み取ることができます。たとえば、df = pd.read_csv("https://mystorageaccount.blob.core.windows.net/upload/test.csv")
は、ブロブストレージからファイルを簡単に読み込みます。しかし、私はazure.storage.blob.BlobService
を使って同じファイルから読むことはできません。
UPDATE 3:ダン、以下のコメントで、私はアズールML上でホストされているJupyterノートからしてみてください示唆しました。私は地元のJupyterノートブックから実行していました(上記のアップデート2を参照)。 ただし、Azure MLノートブックから実行するとエラーが発生し、エラーはrequires
パッケージを再度指します。そのパッケージに関する既知の問題を見つける必要がありますが、私の読んだところでは、既知の問題はurllib3であり、Python 2.7にのみ影響し、Python 3.xでは影響しません。これはPython 3.xノートブックで実行されました。 Grrr。
UPDATE 4:ダンは、以下の注意事項としてExecute Python Script
は比較的新しく、ちょうどネットワークのサポートを得て、これは、AzureのMLネットワーキングの問題かもしれません。しかし、私はAzureアプリケーションサービスwebjobでこれをテストしました。これはまったく異なるAzureプラットフォームにあります。 (全く異なるPythonディストリビューションにもあり、Python 2.7と3.4/5の両方をサポートしていますが、64ビットマシンでも32ビットでしかサポートされていません。)また、コードはInsecurePlatformWarning
というメッセージで失敗します。
[02/08/2016 15:53:54 > b40783: SYS INFO] Run script 'ListenToQueue.py' with script host - 'PythonScriptHost'
[02/08/2016 15:53:54 > b40783: SYS INFO] Status changed to Running
[02/08/2016 15:54:09 > b40783: INFO] test.csv
[02/08/2016 15:54:09 > b40783: ERR ] D:\home\site\wwwroot\env\Lib\site-packages\requests\packages\urllib3\util\ssl_.py:315: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
[02/08/2016 15:54:09 > b40783: ERR ] SNIMissingWarning
[02/08/2016 15:54:09 > b40783: ERR ] D:\home\site\wwwroot\env\Lib\site-packages\requests\packages\urllib3\util\ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
[02/08/2016 15:54:09 > b40783: ERR ] InsecurePlatformWarning
[02/08/2016 15:54:09 > b40783: ERR ] D:\home\site\wwwroot\env\Lib\site-packages\requests\packages\urllib3\util\ssl_.py:120: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
[02/08/2016 15:54:09 > b40783: ERR ] InsecurePlatformWarning
ダン、私は応答を感謝します。 zipファイルで設定するのは素晴らしいイントロですが、azure.storage.blobを効果的にインポートすることができないという中心的な問題に対処する方法についてのヒントしかありません。 Githubから実際のコードを取り込み、参照できるようにしました。これにより、azure.storage.blobを参照することができましたが、すべての要求がタイムアウトしているため、これでは不十分です。私は元の投稿へのコメントでそれをさらに扱っていきます。でも本当にありがとう、ダン。これは非常に役に立ちます。 –
質問の更新は表示されません...しかし、BLOBをアップロードしようとしているコンテナは存在していますか?コンテナがまだ作成されていない場合は、コンテナが作成されません。 'blob_service.create_container( 'mycontainer')'を追加する必要がありますか?これが役に立ちそうですか? –
もう一度、ダンに感謝します。私は今質問を更新し、より明快な問題を指摘しました。コンテナが存在し、Azure MLからコンテナを作成することさえできません。私の更新がより明確になることを願っています。あなたの仕事にもう一度感謝します。私はAzureが大好きで、Pythonが大好きです。私はAzure PaaSとSaaSサービスでPythonを本当に手に入れたいと思っています! –