相关疑难解决方法(0)

gsutil从GCE返回"AccessDeniedException:403 Notufficient Permission"

我通过SSH登录到GCE实例.从那里我想借助服务帐户访问存储:

GCE> gcloud auth list
Credentialed accounts:
 - 1234567890-compute@developer.gserviceaccount.com (active)
Run Code Online (Sandbox Code Playgroud)

我首先确保此服务帐户在我正在处理的项目的权限中被标记为"可以编辑".我还确保在存储桶上写入ACL,我希望他复制文件:

local> gsutil acl ch -u 1234567890-compute@developer.gserviceaccount.com:W gs://mybucket
Run Code Online (Sandbox Code Playgroud)

但是以下命令失败:

GCE> gsutil cp test.txt gs://mybucket/logs
Run Code Online (Sandbox Code Playgroud)

(我还确保在"mybucket"下创建"logs").

我得到的错误信息是:

Copying file://test.txt [Content-Type=text/plain]...
AccessDeniedException: 403 Insufficient Permission               0 B  
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

google-cloud-storage

78
推荐指数
5
解决办法
5万
查看次数

有效地将Pandas数据帧写入Google BigQuery

我正在尝试pandas.DataFrame使用此处pandas.DataFrame.to_gbq()记录的功能上传到Google大查询.问题是,直接上传到Google云端存储GUI需要不到一分钟的时间需要2.3分钟.我正计划上传一堆数据帧(~32),每个数据帧都有相似的大小,所以我想知道它是什么更快的选择.to_gbq()

这是我正在使用的脚本:

dataframe.to_gbq('my_dataset.my_table', 
                 'my_project_id',
                 chunksize=None, # i've tryed with several chunksizes, it runs faster when is one big chunk (at least for me)
                 if_exists='append',
                 verbose=False
                 )

dataframe.to_csv(str(month) + '_file.csv') # the file size its 37.3 MB, this takes almost 2 seconds 
# manually upload the file into GCS GUI
print(dataframe.shape)
(363364, 21)
Run Code Online (Sandbox Code Playgroud)

我的问题是,什么更快?

  1. Dataframe使用pandas.DataFrame.to_gbq()功能上传
  2. 保存Dataframe为csv,然后使用Python API作为文件上传到BigQuery
  3. 保存Dataframe为csv,然后使用此过程将文件上载到Google Cloud Storage ,然后从BigQuery中读取它

更新:

替代方案2,使用pd.DataFrame.to_csv() …

python pandas google-cloud-storage google-bigquery google-cloud-python

9
推荐指数
2
解决办法
8268
查看次数

将 Pandas 数据框保存到 Google Cloud 存储桶

我想将 Pandas 数据框直接保存到 Google Cloud Storage。我使用write-a-pandas-dataframe-to-google-cloud-storage-or-bigquery尝试了不同的方法。但我无法保存。

注意:我只能使用 google.cloud 包

下面是我试过的代码

from google.cloud import storage
import pandas as pd
input_dict = [{'Name': 'A', 'Id': 100}, {'Name': 'B', 'Id': 110}, {'Name': 'C', 'Id': 120}]
df = pd.DataFrame(input_dict)
Run Code Online (Sandbox Code Playgroud)

尝试:1

destination = f'gs://bucket_name/test.csv'
df.to_csv(destination)
Run Code Online (Sandbox Code Playgroud)

尝试:2

storage_client = storage.Client(project='project')
bucket = storage_client.get_bucket('bucket_name')
gs_file = bucket.blob('test.csv')
df.to_csv(gs_file)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

对于选项 1:没有这样的文件或目录:'gs://bucket_name/test.csv'

选项 2:'Blob' 对象没有属性 'close'

谢谢,

拉古纳特。

python pandas google-cloud-storage google-cloud-platform

5
推荐指数
2
解决办法
9422
查看次数

将查询结果保存在 Cloud Storage 的 BigQuery 表中

我想知道将 Google BigQuery 表查询结果存储到 Google Cloud 存储的最佳方式是什么。我的代码目前正在一些 Jupyter Notebook 中运行(在 Vertex AI Workbench 中,与 BigQuery 数据源以及 Cloud Storage 目标相同的项目),如下所示:

# CELL 1 OF 2

from google.cloud import bigquery
bqclient = bigquery.Client()

# The query string can vary:
query_string = """
        SELECT *  
        FROM `my_project-name.my_db.my_table` 
        LIMIT 2000000
        """

dataframe = (
    bqclient.query(query_string)
    .result()
    .to_dataframe(
        create_bqstorage_client=True,
    )
)
print("Dataframe shape: ", dataframe.shape)

# CELL 2 OF 2:

import pandas as pd
dataframe.to_csv('gs://my_bucket/test_file.csv', index=False)
Run Code Online (Sandbox Code Playgroud)

此代码大约需要 7.5 分钟才能成功完成。

是否有更优化的方法来实现上面所做的事情?(这意味着更快,但也许其他方面还可以改进)。

一些附加说明:

  1. 我想“通过 …

google-cloud-storage google-bigquery google-cloud-platform google-cloud-api-gateway google-cloud-vertex-ai

1
推荐指数
1
解决办法
5822
查看次数