我尝试在BQ上运行一些查询,然后将结果加载到Spark中进行进一步处理。我假设这是一个非常常见的用例。上游文档是这样说的:
重要提示:此功能是通过在BigQuery上运行查询并将结果保存到临时表中来实现的,Spark将从中读取结果。
我试图建立一个正确的思维模型来解释这一切是如何工作的,但这个模型对我来说并不合适,毕竟,当我直接使用BQ时,我并没有“将结果保存到一个临时表中”来读取它。
当我查看the jobs.getQueryResults() REST API时,它似乎具有让Spark worker并发读取查询结果的不同部分所需的所有功能。
从JobObservationQuery.destinationTable的文档来看,似乎查询结果是在内部写入表的。
但我肯定有什么原因让我不知道。请告诉我!
1条答案
按热度按时间mmvthczy1#
我不能谈论BigQuery spark连接器的细节,但发生这种情况的正常原因是并行化数据传输。
大多数Spark连接器可以并行读取表,而大数据源中的表通常是基于文件的。但是阅读查询结果是通过单个网络连接进行的。
因此,对结果进行假脱机允许Spark集群工作者并行读取结果,这是Spark优化速度或效率的可扩展性的众多方法之一。
正如你所指出的,查询结果可能总是被假脱机到一个文件中,而不是流到客户端,这在大数据系统中也很常见。