請問如何解決以下問題 (已經確認資料都無誤且都是用複製的) 另外想問問如何將以下程式轉換成alibaba cloud fc可使用的版本 import pandas as pd
from google.cloud import storage
def upload_blob(bucket_name, source_file_name, destination_blob_name): """Uploads a file to the bucket.""" # bucket_name = "your-bucket-name" # source_file_name = "local/path/to/file" # destination_blob_name = "storage-object-name"
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(destination_blob_name)
blob.upload_from_filename(source_file_name)
print(
"File {} uploaded to {}.".format(
source_file_name, destination_blob_name
)
)
def crawler(request): files = ["confirmed_global.csv", "deaths_global.csv", "recovered_global.csv"]
for f in files: df = pd.read_csv("https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_" + f) df = pd.melt(df, id_vars=df.columns[:4], value_vars=df.columns[4:], var_name="date", value_name="count") df.to_csv("/tmp/"+f, index=False) upload_blob("covid19-data-newsurvey", "/tmp/"+f, f)
这个代码片段的目标是从 COVID-19 数据库中爬取数据,将其转换为 Pandas 数据帧,并将其上传到 Google Cloud Storage。由于您想将其转换为 Alibaba Cloud FC 可用的版本,您需要进行以下更改:
将 import 语句中的 Google Cloud Storage 更改为 Alibaba Cloud OSS 的 Python SDK。
更改上传函数以使用阿里云 OSS SDK。
确保您的代码与 Alibaba Cloud FC 的 Python 运行时兼容。
下面是一个可能的示例实现,用于将 Pandas 数据帧上传到阿里云 OSS:
import pandas as pd import oss2
def upload_blob(bucket_name, source_file_name, destination_blob_name, access_key_id, access_key_secret, endpoint): auth = oss2.Auth(access_key_id, access_key_secret) bucket = oss2.Bucket(auth, endpoint, bucket_name) bucket.put_object_from_file(destination_blob_name, source_file_name)
print(
"File {} uploaded to {}.".format(
source_file_name, destination_blob_name
)
)
def crawler(event, context): files = ["confirmed_global.csv", "deaths_global.csv", "recovered_global.csv"] access_key_id = 'your-access-key-id' access_key_secret = 'your-access-key-secret' endpoint = 'your-oss-endpoint' bucket_name = 'your-bucket-name'
for f in files:
df = pd.read_csv("https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_" + f)
df = pd.melt(df, id_vars=df.columns[:4], value_vars=df.columns[4:], var_name="date", value_name="count")
df.to_csv("/tmp/"+f, index=False)
upload_blob(bucket_name, "/tmp/"+f, f, access_key_id, access_key_secret, endpoint)
在此示例中,您需要将 access_key_id、access_key_secret、endpoint 和 bucket_name 替换为您的阿里云 OSS 存储桶的凭据和细节。您需要将此代码上传到 Alibaba Cloud FC,并创建一个触发器以在需要时运行该函数。
可以用 oss 的 put_object_from_file 的 Methodhttps://help.aliyun.com/document_detail/88426.html?spm=a2c4g.88425.0.0.7b0c603bJRzzKa#section-d14-3cw-mfb
不过 oss 的代码要自己换一下,主要也是参考上面的链接
此答案来自钉钉群“阿里函数计算官网客户"
根据您提供的信息和截图,可以看出上传到 OSS 时出现了异常。提示中指出,“AccessDeniedException” 表示访问被拒绝,通常是由于缺少或错误的身份验证密钥所致。
建议您检查是否已正确设置了访问密钥(AccessKeyId 和 AccessKeySecret)。您可以在阿里云控制台的相应的 IAM 管理页面中创建访问密钥,并将其添加到代码中。另外,如果您使用了RAM子账号,还需要确保子账号被授权了上传到 OSS 的权限。
此外,由于您使用的是 Google Cloud 的 Python SDK,而非阿里云 OSS 官方提供的 SDK,建议尝试使用阿里云 OSS 官方推荐的 Python SDK 进行上传操作,这可能有助于解决访问问题。
最后,您还可以在函数计算平台的日志中查看更多详细的错误信息,了解函数计算执行过程中的具体错误,以帮助您更快地解决问题。
这段代码涉及到了Google Cloud Storage的API,如果要在阿里云函数计算中使用,需要进行以下几个步骤:
安装 google-cloud-storage
模块:在函数计算的控制台中添加依赖,或者在本地安装后打包上传至函数计算。
替换 google.cloud
模块为 google.oauth2.service_account
模块:因为Google Cloud Storage需要使用服务账号进行身份验证,所以需要使用 google.oauth2.service_account
模块进行身份验证。
替换 upload_blob
函数为阿里云OSS的上传函数:因为阿里云函数计算中没有Google Cloud Storage服务,需要替换为阿里云OSS的上传函数。
修改后的代码如下:
import pandas as pd
import os
import io
from google.oauth2 import service_account
from google.cloud import storage
import oss2
def upload_to_oss(bucket_name, source_file_name, destination_blob_name):
auth = oss2.Auth('<your-access-key-id>', '<your-access-key-secret>')
bucket = oss2.Bucket(auth, '<your-endpoint>', bucket_name)
with open(source_file_name, 'rb') as f:
bucket.put_object(destination_blob_name, f)
print("File {} uploaded to {}.".format(source_file_name, destination_blob_name))
def crawler(request):
files = ["confirmed_global.csv", "deaths_global.csv", "recovered_global.csv"]
for f in files:
df = pd.read_csv("https://github.com/CSSEGISandData/COVID-19/raw/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_" + f)
df = pd.melt(df, id_vars=df.columns[:4], value_vars=df.columns[4:], var_name="date", value_name="count")
# 将数据写入本地文件
df.to_csv("/tmp/"+f, index=False)
# 将本地文件上传至OSS
upload_to_oss("covid19-data-newsurvey", "/tmp/"+f, f)
需要注意的是,这段代码中的 <your-access-key-id>
、 <your-access-key-secret>
和 <your-endpoint>
需要替换为您自己的阿里云OSS的访问密钥和Endpoint。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。