问题描述
最近我在使用 pyspark 将数据帧数据写入 BigQuery 时遇到了一个问题。原来是这样:
pyspark.sql.utils.IllegalArgumentException:必须通知 u'Temporary 或 Persistent GCS 存储桶
在研究该问题后,我发现要提及的临时 GCS 存储桶 spark.conf
。
bucket = "temp_bucket"
spark.conf.set('temporaryGcsBucket',bucket)
我认为没有像 Hive 那样在 Biquery 中为表创建文件的概念。
我想了解更多,为什么我们需要有 temp-gcs-bucket 来将数据写入 bigquery?
我一直在寻找这背后的原因,但我找不到。
请说明。
解决方法
spark-bigquery-connector 与 Apache Spark 一起用于从 BigQuery 读取数据和向 BigQuery 写入数据。连接器通过首先将所有数据缓冲到 Cloud Storage 临时表中来将数据写入 BigQuery,然后在一次操作中将所有数据复制到 BigQuery。一旦 BigQuery 加载操作成功,连接器将尝试删除临时文件,并在 Spark 应用程序终止时再次尝试删除。如果作业失败,您可能需要手动移除所有剩余的临时 Cloud Storage 文件。通常,您会在 gs://[bucket]/.spark-bigquery-[jobid]-[UUID] 中找到临时的 BigQuery 导出。
有关将数据写入 bigquery 的更多参考,您可以关注 here。