首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当查询包含大量列的Hive表时,是否有可能减少MetaStore检查的数量?

当查询包含大量列的Hive表时,是否有可能减少MetaStore检查的数量?
EN

Stack Overflow用户
提问于 2020-01-09 13:48:33
回答 1查看 2.1K关注 0票数 4

我在databricks上使用spark,它使用的是Hive转移,我正在尝试设置一个使用相当多列(20+)的作业/查询。

运行亚稳态验证检查所需的时间与我的查询中包含的列数成线性关系--有任何方法可以跳过这个步骤吗?或者预先计算支票?或者至少让亚稳态只检查一次,而不是每列一次?

一个小的例子是,当我运行下面的程序时,即使在调用显示或收集之前,也只会发生一次亚稳态检查:

代码语言:javascript
复制
new_table = table.withColumn("new_col1", F.col("col1")

当我运行以下程序时,亚稳态检查器会发生多次,因此需要更长的时间:

代码语言:javascript
复制
new_table = (table
.withColumn("new_col1", F.col("col1")
.withColumn("new_col2", F.col("col2")
.withColumn("new_col3", F.col("col3")
.withColumn("new_col4", F.col("col4")
.withColumn("new_col5", F.col("col5")
)

亚稳态检查它在驱动节点上是这样做的:

代码语言:javascript
复制
20/01/09 11:29:24 INFO HiveMetaStore: 6: get_database: xxx
20/01/09 11:29:24 INFO audit: ugi=root    ip=unknown-ip-addr    cmd=get_database: xxx

对databricks上的用户的视图是:

代码语言:javascript
复制
Performing Hive catalog operation: databaseExists
Performing Hive catalog operation: tableExists
Performing Hive catalog operation: getRawTable
Running command...

我想知道是否有人能确认这就是它的工作方式(每列一次亚稳态检查),以及我是否必须计划一下亚稳态检查的开销。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-21 06:18:33

我对这种行为感到惊讶,因为它不符合星火处理模型,而且我不能在Scala中复制它。它可能在某种程度上是特定于PySpark的,但我怀疑,因为PySpark只是一个用于创建星火计划的API。

然而,正在发生的事情是,在每一次withColumn(...)之后,计划都会被分析。如果计划很大,这可能需要一段时间。然而,有一个简单的优化。用withColumn(...)替换对独立列的多个df.select(F.col("*"), F.col("col2").as("new_col2"), ...)调用。在这种情况下,将只执行一次分析。

在一些非常大的计划中,我们为单个笔记本单元节省了10+分钟的分析时间。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59665429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档