我一直在尝试将 gcs 中的存储桶直接读取到 pandas 数据帧中,如下所示:
gcs_df = pandas.read_csv("gs://my_bucket/my_file.csv")
这导致:
gcsfs.utils.HttpError: Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object.
由于我没有在本地机器中设置任何凭据(从我读到的内容来看(。
对于脚本的所有其他功能,我通过以下方式使用服务帐户:
sa_creds = service_account.Credentials.from_service_account_file("my_sa_key.json")
我是否可以以某种方式将此信息传递到read_csv,这样我就不必在本地计算机中使用该帐户?
有什么想法吗?
所以pandas
库依赖于 gcsfs 库。因此,要执行上述操作,您所要做的就是:
import pandas
import gcsfs
fs = gcsfs.GCSFileSystem(project= <project_id>, token=<json path>)
with fs.open("gs://my_bucket/my_file.csv") as f:
gcs_df = pandas.read_csv(f)
print(gcs_df)
是指以 .json 格式保存为密钥的服务帐户凭据。基于 gcsfs 文档,它可以是字典或更多。
有点晚了,但它可能对某人仍然有用: 如果您有包含凭据的 json 文件的路径,则可以使用os.environ
从代码中将其添加到环境变量中:
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "my_sa_key.json"
然后,使用gcsfs
的所有内容都应该找到您现在的默认凭据。我测试了它来用熊猫写一个csv,它奏效了。