python - 如何在 Python 3 上将数据帧上传到 Google Cloud Storage(bucket)?
问题描述
我想创建一个云函数(应在每天 01:00 执行)。该功能应
- 生成数据框
- [导出为 dataframe.csv] <---- 不确定是否需要
- 将数据帧(或 .csv)推送到存储桶
......
- 问题1:是否可以将数据帧推送到存储桶?
- 问题 2:如何在 CloudFunction(CF) 中创建一个 .csv 文件,以便将其推送到存储桶中?
现在更新代码:(仍然给出错误)
def push_cars( data ): ## <<----- not sure how many paramter &why??
import requests
import pandas as pd
import os
from datetime import datetime
from google.cloud.storage.blob import Blob
from google.cloud import storage
#import csv # <<--- not sure if required???
cars_dict = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
cars = pd.DataFrame(cars_dict, columns = ['Brand', 'Price'])
timestamp = datetime.now().strftime("%Y_%m_%d-%H_%M_%S")
name = "cars_" + timestamp + ".csv"
cars.to_csv( "/tmp/test.csv" ,index=False)
with open('/tmp/test.csv', "w") as csv:
csv.write(name)
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "My-project.json"
target_bucket = 'cars:python_gogo'
storage_client = storage.Client()
bucket = storage_client.get_bucket( target_bucket )
data = bucket .blob( name_output )
对于云上的复制,您需要创建一个包含以下内容的 requirements.txt:
requests
pandas
google-cloud-storage
datetime
在云外壳中,我使用以下方法部署此 CF: gcloud functions deploy push_cars--entry-point=push_cars--runtime=python37 --memory=1024MB --region=us-east1 --allow-unauthenticated --trigger -http
解决方案
问题一:
数据帧不能直接写入云端存储,它需要是一个文件(可以是你提到的.csv),然后你可以将文件写入谷歌云端存储桶。这意味着需要第 2 步。
问题2:
dataframe.csv
保存后,您/tmp
可以将其传输到 Google Cloud Storage buket。
实现这两件事的代码将是这样的:
def push_cars( data, context ):
import requests
import pandas as pd
import os
from datetime import datetime
from google.cloud.storage.blob import Blob
from google.cloud import storage
cars_dict = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
'Price': [22000,25000,27000,35000]
}
cars = pd.DataFrame(cars_dict, columns = ['Brand', 'Price'])
timestamp = datetime.now().strftime("%Y_%m_%d-%H_%M_%S")
name = "cars_" + timestamp + ".csv"
cars.to_csv( cars ,index=False)
with open('/tmp/test.csv', "w") as csv:
csv.write(cars)
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = "My-project.json"
target_bucket = 'sp500_python_gogo'
storage_client = storage.Client()
bucket = storage_client.get_bucket( target_bucket )
with open('/tmp/test.csv', 'r') as file_obj:
upload_blob(target_bucket, file_obj, name)
推荐阅读
- php - 没有自己的表的 CakePHP 自定义查询
- mysql - 在我的 SQL 中自动增加具有连接值的列
- angular - 如何将 Angular 指令与 MF 中的延迟加载组件一起使用
- android - Google Play 不断拒绝使用品牌标记的应用更新
- javascript - Closest() 仅第一个元素 JS
- java - Java HtmlUnit - 如何增加加载页面的超时时间?
- makefile - 编译 GoodbyeDPI v0.1.6
- reactjs - 如何使用 react-hook-form 从值数组中的选定项目中删除项目?
- python - 数据框值未正确转换为字符串
- database - Oracle 11g 速成版监听器错误