apache-spark - Spark - 在保存到配置单元表(ORC)时获取计数
问题描述
我想问你是否有可能在不降低性能的情况下使用 saveAsTable() 来获取我插入 Hive 表的 DataFrame 的计数?
老实说,我想报告日志计数,或者最好的方法是在插入之前和插入之后获取计数,因为这将是 Splunk Dashboard 中非常有用的信息,但我不想添加可能会严重损害性能的配置单元查询,因为我我有超过 100 次转换。
提前感谢您的帮助!
解决方案
set hive.stats.autogather=false;
- 对于新创建的表和/或分区(通过 INSERT OVERWRITE 命令填充),默认情况下会自动计算统计信息。用户必须将布尔变量 hive.stats.autogather 显式设置为 false,以便不会自动计算统计信息并将其存储到 Hive MetaStore。
表级统计,
spark.sql("ANALYZE TABLE tableName COMPUTE STATISTICS").show()
这导致
parameters:{totalSize=0, numRows=0, rawDataSize=0...```
表分区级别统计:
spark.sql("ANALYZE TABLE Table1 PARTITION(ds, hr) COMPUTE STATISTICS").show()
注意:当用户发出该命令时,他可能会或可能不会指定分区规范。如果用户未指定任何分区规范,则会为表以及所有分区(如果有)收集统计信息。
表列级统计:
spark.sql("ANALYZE TABLE Table1 PARTITION(ds, hr) COMPUTE STATISTICS FOR COLUMNS").show()
您可以从以下网址获取更多详细信息:https ://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-ExistingTables%E2%80%93ANALYZE
推荐阅读
- node.js - 如何在 Sequelize 中更新对象
- java - 单击 RecyclerView 后使用 Firebase 实时数据库填充详细信息活动
- mysql - SQL连接两个没有键列但需要与日期过滤列连接的表
- c++ - 链接器错误:未定义对 `ThreadPool::ThreadPool()' 的引用
- python - 根据列的值计算记录
- python - 存储具有相同值的字典
- ruby-on-rails - bundle exec 命令失败但给出退出代码 0
- ignite - 点燃没有索引的 QueryEntity
- wso2 - wso2 相互 ssl curl 命令 APIM 3.2.0
- python - 使用 list append 和 For 循环时,是否应该在 python 中事先声明变量?