Apache Spark Stats集合

时间:2018-10-16 04:16:36

标签: apache-spark hive apache-spark-sql query-optimization

我对Apache Spark中表格的统计信息收集有以下疑问

  1. 收集的所有统计信息存储在哪里?在Metastore中?
  2. 在Spark和Hive共享一个元存储的系统中,由Hive应用程序在Hive表上收集的统计信息是否可用于Spark优化器?同样,Spark在hive表上收集的统计信息是否可用于Hive优化器?
  3. 是否可以强制Spark收集加载到内存中的数据帧上的统计信息,或收集从数据帧创建的临时表上的统计信息?

1 个答案:

答案 0 :(得分:2)

  1. 它存储在Hive Metastore中。特别是作为表属性。诸如ORC和Parquet之类的格式还具有读者可以使用的每个文件和每个块的统计信息。但是优化程序不会使用它。

  2. Spark和Hive使用不同的参数名称来存储统计信息。因此,不幸的是,他们无法使用其他引擎收集的统计信息。

具体来说,在Spark中收集统计信息后,表属性具有:

TBLPROPERTIES (
  'numFiles'='1', 
  'numRows'='-1', 
  'rawDataSize'='-1', 
  'spark.sql.statistics.numRows'='111111', 
  'spark.sql.statistics.totalSize'='11111', 
  'totalSize'='111111',

在Hive中收集统计信息之后,表属性具有:

TBLPROPERTIES ( 
  'numFiles'='1', 
  'numRows'='1111111', 
  'rawDataSize'='1111111',