从pyspark读取时,Google云存储需要Storage.objects.create权限

从pyspark读取时,Google云存储需要Storage.objects.create权限,pyspark,google-cloud-platform,apache-spark-sql,google-cloud-storage,airflow,Pyspark,Google Cloud Platform,Apache Spark Sql,Google Cloud Storage,Airflow,我正在尝试从Google云存储读取pyspark数据帧,但我不断收到一个错误,即服务帐户没有Storage.objects.create权限。该帐户没有写入权限,但它正在读取拼花地板文件: spark\u session.read.parquet(输入路径) 18/12/25 13:12:00 INFO com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl:修复一批丢

我正在尝试从Google云存储读取pyspark数据帧,但我不断收到一个错误,即服务帐户没有Storage.objects.create权限。该帐户没有写入权限,但它正在读取拼花地板文件:

spark\u session.read.parquet(输入路径)
18/12/25 13:12:00 INFO com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl:修复一批丢失的目录。
18/12/25 13:12:01错误com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl:无法修复某些丢失的目录。
com.google.cloud.hadoop.repacked.gcs.com.google.api.client.googleapis.json.googlejson响应异常:403禁止
{
“代码”:403,
“错误”:[{
“域”:“全局”,
“消息”:“***.gserviceaccount.com没有对***的storage.objects.create访问权限”,
“原因”:“禁止”
} ],
“消息”:“***.gserviceaccount.com没有对***的storage.objects.create访问权。”
}

请查看此问题:

Spark将在执行某些操作时创建临时文件。我在从GCS文件提取数据并转换为用户定义的对象时遇到过这种情况。当加载到BQ时,它也可以这样做,因为写入存储器然后从GCS执行单个加载更有效。你可以看到改变了


遗憾的是,据我所知,没有具体的联系,因为这个问题没有记录在案。我将尝试为您找到一个,如果成功,我将更新我的回复。

我们发现了问题。这是由于地面军事系统连接器中隐含的自动修复功能造成的。我们通过将
fs.gs.implicit.dir.repair.enable
设置为
false

来禁用此行为,您从哪里运行此代码?另外,在向服务帐户添加“storage.objects.create”权限时,错误是否消失了?@Maxim,我正在dataproc群集上运行的pyspark应用程序上运行此代码,并计划使用Airflow。我无法测试,因为此帐户无法获得此访问级别谢谢,Bryan。那么,您是否建议DataFrame.read()可能是这些操作之一?您熟悉我可以设置哪些参数来避免这种情况吗?对于那些可能不知道的人,如果使用pyspark:sc.jsc.hadoopConfiguration().set(“fs.gs.implicit.dir.repair.enable”,“false”),上述情况会发生在spark上下文中的hadoop配置中