使用 Cloud Functions 将本地文件加载到 BigQuery 会返回 OSError: [Errno 30] `Read-only file system:
Posted
技术标签:
【中文标题】使用 Cloud Functions 将本地文件加载到 BigQuery 会返回 OSError: [Errno 30] `Read-only file system:【英文标题】:Loading local file using Cloud Functions to BigQuery returns OSError: [Errno 30] `Read-only file system: 【发布时间】:2019-10-17 11:40:19 【问题描述】:我正在尝试将 Dataframe 加载到 BigQuery 中。我这样做如下:
# Prepare temp file to stream from local file
temp_file = table_name + '-' + str(timestamp_in_ms())
df.to_csv(temp_file, index=None, header=True)
# Define job_config
job_config = bigquery.LoadJobConfig()
job_config.schema = schema
job_config.skip_leading_rows = 1
job_config.source_format = bigquery.SourceFormat.CSV
# Create job to load data into table
with open(temp_file, "r+b") as source_file:
load_job = client.load_table_from_file(source_file, dataset_ref.table(table_name), job_config=job_config)
这在本地开发中运行良好,但是当我部署 Cloud Function 时,它返回以下错误:
OSError: [Errno 30] Read-only file system: 'temp_file'
这发生在open(temp_file, "r+b") as source_file:
一行
为什么无法读取云函数临时存储上的本地文件?出了什么问题?
【问题讨论】:
【参考方案1】:可能你没有指定文件夹 /tmp
本地磁盘
Cloud Functions 提供对本地磁盘挂载点 (/tmp) 的访问 这被称为“tmpfs”卷,其中数据写入该卷 存储在内存中。没有与此相关的具体费用 但是将数据写入 /tmp 挂载点会消耗内存 为该功能提供的资源。
如上所述:https://cloud.google.com/functions/pricing
【讨论】:
唯一的困难是当你在本地测试它时,你需要做tmp/
而不是/tmp
。以上是关于使用 Cloud Functions 将本地文件加载到 BigQuery 会返回 OSError: [Errno 30] `Read-only file system:的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Functions:如何上传附加文件以在代码中使用?
如何通过 Cloud Functions 将文件上传到 Cloud Storage 并使用 Firestore 控制对 Cloud Storage 的访问?
我可以将 Firebase Cloud Functions 用于搜索引擎吗?
如何从 Cloud Functions 连接 Google Cloud SQL?