假设一个包含一些数据的pandas Dataframe,将这些数据存储到Firebase的最佳方法是什么?
我是否应该将Dataframe转换为本地文件(例如.csv,.txt),然后将其上传到Firebase Storage,或者是否可以直接存储PandasDataframe而无需转换?或者是否有更好的最佳实践?
更新01/03-到目前为止,我已经提出了这个解决方案,它需要在本地写一个csv文件,然后阅读并上传它,然后删除本地文件。但是我怀疑这是最有效的方法,因此我想知道是否可以做得更好更快?
import os
import firebase_admin
from firebase_admin import db, storage
cred = firebase_admin.credentials.Certificate(cert_json)
app = firebase_admin.initialize_app(cred, config)
bucket = storage.bucket(app=app)
def upload_df(df, data_id):
"""
Upload a Dataframe as a csv to Firebase Storage
:return: storage_ref
"""
# Storage location + extension
storage_ref = data_id + ".csv"
# Store locally
df.to_csv(data_id)
# Upload to Firebase Storage
blob = bucket.blob(storage_ref)
with open(data_id,'rb') as local_file:
blob.upload_from_file(local_file)
# Delete locally
os.remove(data_id)
return storage_ref
4条答案
按热度按时间bmp9r5qi1#
对于python-firebase和to_dict:
您可以使用快照信息和端点取回数据,并使用
from_dict()
重新建立df
。您可以将此解决方案调整为SQL
和JSON
解决方案,pandas
也支持这些解决方案。或者,根据脚本的执行位置,您可以考虑将firebase视为数据库,并使用
firebase_admin
中的dbapi(查看this)。至于它是否符合最佳实践,在不了解您的用例的情况下很难说。
v09wglhw2#
如果只想减少代码长度以及创建和删除文件的步骤,可以使用
upload_from_string
:https://googleapis.github.io/google-cloud-python/latest/storage/blobs.html#google.cloud.storage.blob.Blob.upload_from_string
34gzjxbg3#
经过几个小时的摸索,下面的解决方案对我来说很有效。你需要把你的csv文件转换成字节,然后上传它。
这就是快乐编程!
68de4m5k4#
我发现从非常小的 Dataframe 开始(低于100 KB!),在存储之前压缩它们是值得的。我使用了下面的google cloud和pickle库。你的文件也可以在通常的firebase存储器上使用这种方式,你在内存和速度上都得到了收益,无论是在写还是阅读的时候。