Python 如何在数据科学体验项目中创建到Bluemix上对象存储的连接?

Python 如何在数据科学体验项目中创建到Bluemix上对象存储的连接?,python,ibm-cloud,object-storage,data-science-experience,Python,Ibm Cloud,Object Storage,Data Science Experience,我正在尝试为一个与项目创建的默认存储不同的项目设置与Bluemix对象存储的连接。这是一个问题,因为: 1当我要添加新连接时,我要使用的对象存储实例不在数据服务下 2当我要添加Softlayer对象存储时,要求我提供的凭据是登录URL、访问密钥和密钥,但我拥有的实例凭据是auth_URL:project:projectId:region:userId:username:password:domainId:domainName:role 3我有一个很好的占位符对象存储接口,但我想用另一个实例替换它

我正在尝试为一个与项目创建的默认存储不同的项目设置与Bluemix对象存储的连接。这是一个问题,因为:

1当我要添加新连接时,我要使用的对象存储实例不在数据服务下

2当我要添加Softlayer对象存储时,要求我提供的凭据是登录URL、访问密钥和密钥,但我拥有的实例凭据是auth_URL:project:projectId:region:userId:username:password:domainId:domainName:role

3我有一个很好的占位符对象存储接口,但我想用另一个实例替换它


请帮助我访问不同Bluemix对象存储实例中的数据,而不是默认连接到项目的Bluemix对象存储实例。

您可以使用“插入到代码”功能生成的功能,并插入来自其他对象存储的凭据。例如:

from io import StringIO
import requests
import json
import pandas as pd

# @hidden_cell
# This function accesses a file in your Object Storage. The definition contains your credentials.
# You might want to remove those credentials before you share your notebook.
def get_object_storage_file_with_credentials(container, filename):
"""This functions returns a StringIO object containing
the file content from Bluemix Object Storage."""

url1 = ''.join(['https://identity.open.softlayer.com', '/v3/auth/tokens'])
data = {'auth': {'identity': {'methods': ['password'],
        'password': {'user': {'name': 'admin_xxxx','domain': {'id': 'xxxxxxxxxxx'},
        'password': 'xxxxxxxxxx'}}}}}
headers1 = {'Content-Type': 'application/json'}
resp1 = requests.post(url=url1, data=json.dumps(data), headers=headers1)
resp1_body = resp1.json()
for e1 in resp1_body['token']['catalog']:
    if(e1['type']=='object-store'):
        for e2 in e1['endpoints']:
                    if(e2['interface']=='public'and e2['region']=='dallas'):
                        url2 = ''.join([e2['url'],'/', container, '/', filename])
s_subject_token = resp1.headers['x-subject-token']
headers2 = {'X-Auth-Token': s_subject_token, 'accept': 'application/json'}
resp2 = requests.get(url=url2, headers=headers2)
return StringIO(resp2.text)
在这里,替换下一个Bluemix对象存储凭据中的用户名、域id和密码值。之后,您只需通过以下方式从该对象存储中的容器访问文件:

cars_df = pd.read_csv(get_object_storage_file_with_credentials('<containerName>', '<filename>.csv'))
cars_df.head()

您可以使用“插入代码”功能生成的函数,并从另一个对象存储器插入凭据。例如:

from io import StringIO
import requests
import json
import pandas as pd

# @hidden_cell
# This function accesses a file in your Object Storage. The definition contains your credentials.
# You might want to remove those credentials before you share your notebook.
def get_object_storage_file_with_credentials(container, filename):
"""This functions returns a StringIO object containing
the file content from Bluemix Object Storage."""

url1 = ''.join(['https://identity.open.softlayer.com', '/v3/auth/tokens'])
data = {'auth': {'identity': {'methods': ['password'],
        'password': {'user': {'name': 'admin_xxxx','domain': {'id': 'xxxxxxxxxxx'},
        'password': 'xxxxxxxxxx'}}}}}
headers1 = {'Content-Type': 'application/json'}
resp1 = requests.post(url=url1, data=json.dumps(data), headers=headers1)
resp1_body = resp1.json()
for e1 in resp1_body['token']['catalog']:
    if(e1['type']=='object-store'):
        for e2 in e1['endpoints']:
                    if(e2['interface']=='public'and e2['region']=='dallas'):
                        url2 = ''.join([e2['url'],'/', container, '/', filename])
s_subject_token = resp1.headers['x-subject-token']
headers2 = {'X-Auth-Token': s_subject_token, 'accept': 'application/json'}
resp2 = requests.get(url=url2, headers=headers2)
return StringIO(resp2.text)
在这里,替换下一个Bluemix对象存储凭据中的用户名、域id和密码值。之后,您只需通过以下方式从该对象存储中的容器访问文件:

cars_df = pd.read_csv(get_object_storage_file_with_credentials('<containerName>', '<filename>.csv'))
cars_df.head()
在R中:

要将文件写入对象存储器,请执行以下操作:

## Status '201' is a successful signal
write.csv(outputDF,'myOutputFile.csv', row.names = F)
status <- objectStore.put(credentials,'myOutputFile.csv')
paste("Status for final output CSV:", status, sep = " ")
类似地,要保存模型对象注释,必须在凭据列表中更改为文件名或创建第二个凭据变量:

saveRDS(object = finalMod, file = "myModel.rds")
status <- objectStore.put(credentials, "myModel.rds")
paste("Status for model object:", status, sep = " ")
希望这有帮助

在R:

要将文件写入对象存储器,请执行以下操作:

## Status '201' is a successful signal
write.csv(outputDF,'myOutputFile.csv', row.names = F)
status <- objectStore.put(credentials,'myOutputFile.csv')
paste("Status for final output CSV:", status, sep = " ")
类似地,要保存模型对象注释,必须在凭据列表中更改为文件名或创建第二个凭据变量:

saveRDS(object = finalMod, file = "myModel.rds")
status <- objectStore.put(credentials, "myModel.rds")
paste("Status for model object:", status, sep = " ")

希望这有帮助

除了@Sumit Goyal的回答之外。 您需要在本地gpfs中下载该文件,以便使用不支持从swift对象存储读取或仅支持从本地存储/文件系统读取的API或库

objStorCred={ 验证url:, 项目:对象存储XXXXX, 项目编号:XXXXX 5A3, 地区:达拉斯, 用户ID:XXXXXX 98A15E0, 用户名:admin_fxxxx9, 密码:XXXXX, 域名:aXXXX5a, 域名:XXXX, 角色:管理员 }

从io导入StringIO 导入请求 导入json 作为pd进口熊猫

@hidden_单元

此函数用于访问对象存储中的文件。定义包含您的凭据

您可能希望在共享笔记本之前删除这些凭据

def get_对象_存储_文件容器,文件名:

此函数返回一个StringIO对象,该对象包含 Bluemix对象存储中的文件内容

注意,我们得到的不是stringIO对象,而是响应对象

现在可以使用中间本地存储来存储.mat文件

然后调用这个函数

r=get\u object\u storage\u filecontainerr1,example.mat

现在使用h5py读取文件。 您可能需要使用pip install h5py安装h5py

import h5py
f=h5py.File'example.mat' f、 钥匙

谢谢,
查尔斯。

除了@Sumit Goyal的回答。 您需要在本地gpfs中下载该文件,以便使用不支持从swift对象存储读取或仅支持从本地存储/文件系统读取的API或库

objStorCred={ 验证url:, 项目:对象存储XXXXX, 项目编号:XXXXX 5A3, 地区:达拉斯, 用户ID:XXXXXX 98A15E0, 用户名:admin_fxxxx9, 密码:XXXXX, 域名:aXXXX5a, 域名:XXXX, 角色:管理员 }

从io导入StringIO 导入请求 导入json 作为pd进口熊猫

@hidden_单元

此函数用于访问对象存储中的文件。定义包含您的凭据

您可能希望在共享笔记本之前删除这些凭据

def get_对象_存储_文件容器,文件名:

此函数返回一个StringIO对象,该对象包含 Bluemix对象存储中的文件内容

注意,我们得到的不是stringIO对象,而是响应对象

现在可以使用中间本地存储来存储.mat文件

然后调用这个函数

r=get\u object\u storage\u filecontainerr1,example.mat

现在使用h5py读取文件。 您可能需要使用pip install h5py安装h5py

import h5py
f=h5py.File'example.mat' f、 钥匙

谢谢,
Charles。

我强烈建议您看看哪些适用于Python、R和Scala

对于Python+软层凭据,具体如下代码:

slos=ibmos2spark.softlayersc,配置名称,身份验证url,租户,用户名,密码 D data=sc.textFileslos.urlcontainer\u name,object\u name

取自


下一个问题是如何加载.mat文件-这似乎是一个迂回的过程,首先使用sc.binaryFiles将它们放入内存。

我强烈建议您看看哪些文件适用于Python、R和Scala

对于Python+软层凭据,具体如下代码:

slos=ibmos2spark.softlayersc,配置名称,身份验证url,租户,用户名,密码 data=sc.textFileslos.urlcontainer\u name,object\u name

取自


下一个问题是如何加载.mat文件-这似乎是一个迂回的过程,首先使用sc.binaryFiles将它们放入内存。

对象存储上的文件是.mat文件,因此我想将它们下载到DSX上的云环境中。问题是,我以前尝试过上面的代码,但遇到身份验证错误。对象存储上的文件是.mat文件,因此我想将它们下载到DSX上的云环境中。问题是我以前尝试过上面的代码,但我得到了一个身份验证错误。谢谢你的回答,但我希望用Python实现数据加载。另外,数据是.mat格式的。谢谢你的回答,但我希望用Python实现数据加载。另外,数据是.mat格式的。你能发布错误吗?上面的问题中没有执行代码,但是,我的目标是。现在,当我尝试连接时,我得到了这个错误授权失败。授权失败:找不到资源。HTTP 404请求ID:req-861d0e7a-e89a-4c14-a198-2d9f829cb8acI如果您试图使用SoftLayer对象存储或Bluemix对象存储,我会感到困惑。你能澄清一下吗?上面列出的凭据似乎暗示了Bluemix对象存储,但您称之为SoftLayer存储。我使用的是Bluemix对象存储。我提到Softlayer是因为这是在DSX中添加连接的唯一选项。你能发布错误吗?在上面的问题中没有正在执行的代码,但是,我的目标是。现在,当我尝试连接时,我得到了这个错误授权失败。授权失败:找不到资源。HTTP 404请求ID:req-861d0e7a-e89a-4c14-a198-2d9f829cb8acI如果您试图使用SoftLayer对象存储或Bluemix对象存储,我会感到困惑。你能澄清一下吗?上面列出的凭据似乎暗示了Bluemix对象存储,但您称之为SoftLayer存储。我使用的是Bluemix对象存储。我提到Softlayer是因为这是在DSX中添加连接的唯一选项。@Rossleiwis-我建议您删除该链接并获取新凭据。你正在向所有人泄露实时凭证。否则没关系,但这是一个纯粹的python故事,而不是spark故事。@Rossliews-我建议您删除该链接并获得新的凭据。你正在向所有人泄露实时凭证。否则没关系,但这是一个纯粹的python故事,而不是spark故事。