Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python bigquery存储API:是否可以将AVRO文件直接流式传输/保存到Google云存储?_Python_Google Cloud Platform_Google Bigquery_Google Cloud Storage_Avro - Fatal编程技术网

Python bigquery存储API:是否可以将AVRO文件直接流式传输/保存到Google云存储?

Python bigquery存储API:是否可以将AVRO文件直接流式传输/保存到Google云存储?,python,google-cloud-platform,google-bigquery,google-cloud-storage,avro,Python,Google Cloud Platform,Google Bigquery,Google Cloud Storage,Avro,我想将一个90 TB的BigQuery表导出到Google云存储。根据,BigQuery存储API(beta版)应该是一种选择,因为与其他方法相关联的导出大小配额(例如ExtractBytesPerDay) 该表是日期分区的,每个分区约占300 GB。我有一个运行在GCP上的Python AI笔记本,它通过这个改编自的脚本(并行)运行分区 是否可以将数据流中的数据直接保存到Google云存储 我尝试使用将表作为AVRO文件保存到我的AI实例,然后使用将它们上载到GCS,但这个过程非常缓慢。我希望

我想将一个90 TB的BigQuery表导出到Google云存储。根据,BigQuery存储API(beta版)应该是一种选择,因为与其他方法相关联的导出大小配额(例如ExtractBytesPerDay)

该表是日期分区的,每个分区约占300 GB。我有一个运行在GCP上的Python AI笔记本,它通过这个改编自的脚本(并行)运行分区

是否可以将数据流中的数据直接保存到Google云存储

我尝试使用将表作为AVRO文件保存到我的AI实例,然后使用将它们上载到GCS,但这个过程非常缓慢。我希望这条河能够指向我的地面军事系统水桶。我尝试过从文件中上传Blob.upload\u,但无法理解

我无法将整个流解码到内存并使用Blob.upload\u from\u string,因为我没有超过300 GB的RAM

我花了两天的时间分析GCP文档,但什么都找不到,所以我非常感谢您的帮助,如果可能的话,最好是提供一段代码片段。(如果使用其他文件格式更容易,我完全赞成。)


谢谢大家!

一个简单的方法就是使用?它使用BigQuery存储API将表直接读取到Spark的数据帧中。您可以在上创建Spark群集,它与BigQuery和GCS位于相同的数据中心,使读写速度更快

代码示例如下所示:

df = spark.read.format("bigquery") \
  .option("table", "bigquery-public-data.usa_names.usa_1910_current") \
  .load()

df.write.format("avro").save("gs://bucket/path")
您还可以过滤数据并分别处理每个分区:

df = spark.read.format("bigquery") \
  .option("table", "bigquery-public-data.usa_names.usa_1910_current") \
  .option("filter", "the_date='2020-05-12'") \
  .load()

# OR, in case you don't need to give the partition at load

df = spark.read.format("bigquery") \
  .option("table", "bigquery-public-data.usa_names.usa_1910_current") \
  .load()

df.where("the_date='2020-05-12'").write....
请注意,为了读取大量数据,您需要一个足够大的集群

是否可以将数据流中的数据直接保存到Google云存储

BigQuery存储API本身无法直接写入GCS;您需要将API与代码配对以解析数据,将其写入本地存储,然后上传到GCS。这可能是您手动编写的代码,也可能是来自某种框架的代码


它看起来像是您以单线程方式共享每个分区的代码片段,它将吞吐量限制为单个读取流的吞吐量。存储API旨在通过并行实现高吞吐量,因此它将与并行处理框架(如Google Cloud Dataflow或Apache Spark)一起使用。如果您想使用数据流,可以从以下几个方面入手:;对于Spark,您可以使用David已经共享的代码片段。

谢谢,Kenneth!我认为我的过程中的瓶颈是保存到VM实例中的本地存储,而不是单个读取流的吞吐量。我没有使用过谷歌云数据流或ApacheSpark,但我会尝试一下。(我用帕塞尔语)谢谢你,大卫。我还没有使用Dataproc和Spark,但我会尽量听从你的建议。在这个项目之前,我只使用PLX。
df = spark.read.format("bigquery") \
  .option("table", "bigquery-public-data.usa_names.usa_1910_current") \
  .option("filter", "the_date='2020-05-12'") \
  .load()

# OR, in case you don't need to give the partition at load

df = spark.read.format("bigquery") \
  .option("table", "bigquery-public-data.usa_names.usa_1910_current") \
  .load()

df.where("the_date='2020-05-12'").write....