为什么 Spark-BigQuery 连接器在从查询加载数据时会创建临时表?

Why Spark-BigQuery connector creates temporary table when loading data from query?

提问人:Kohsuke Kawaguchi 提问时间:11/16/2023 更新时间:11/16/2023 访问量:9

问:

我正在尝试在BQ上运行一些查询,然后将结果加载到Spark中进行进一步处理。我假设这是一个非常常见的用例。上游文档是这样说的:

重要提示:此功能的实现方法是在 BigQuery 上运行查询并将结果保存到临时表中,Spark 将从中读取结果。

我正在尝试建立一个适当的心智模型来说明这一切是如何运作的,而这个模型对我不起作用。毕竟,当我直接使用BQ时,我不会“将结果保存到临时表中”来读取它。

当我查看 jobs.getQueryResults() REST API 时,它似乎具有让 Spark 工作人员同时读取查询结果的不同部分所需的所有功能。

JobConfigurationQuery.destinationTable 的文档来看,查询结果似乎无论如何都会在内部写入表。

不过,我敢肯定我错过了一些原因。请启发我!

apache-spark google-bigquery

评论


答:

0赞 David Browne - Microsoft 11/16/2023 #1

我无法谈论BigQuery spark连接器的细节,但发生这种情况的正常原因是并行化数据传输。

大多数 Spark 连接器都可以从表中并行读取,在大数据源中,表通常是基于文件的。但是,读取查询结果是通过单个网络连接进行的。

因此,假脱机结果允许 Spark 集群工作线程并行读取结果,这是 Spark 优化可扩展性而不是速度或效率的众多方法之一。

此外,正如您所指出的,查询结果可能始终被后台处理到文件,而不是流式传输到客户端。这在大数据系统中也很常见。