scala - 在 Spark 中计算 Hive 表的统计信息
问题描述
我创建了一个 DataFrame 来加载 CSV 文件并创建了一个临时表来获取列统计信息。
但是,当我尝试运行 ANALYZE 命令时,我遇到了以下错误相同的分析命令在 Hive 中成功运行。
火花版本:1.6.3
df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("mode", "DROPMALFORMED")
.load("/bn_data/bopis/*.csv")
// To get the statistics of columns
df.registerTempTable("bopis")
val stat=sqlContext.sql("analyze table bopis compute statistics for columns").show()
错误:
java.lang.RuntimeException: [1.1] failure: ``with'' expected but identifier analyze found
analyze table bopis compute statistics for columns
^
请告诉我们如何使用 Spark 实现列统计
谢谢。!
解决方案
如果使用该FOR COLUMNS
选项,则必须传递列名列表,请参阅https://docs.databricks.com/spark/latest/spark-sql/language-manual/analyze-table.html
在任何情况下,即使您这样做,您也会收到错误消息,因为您无法在临时表上运行计算统计信息。(你会得到一个Table or view 'bopis' not found in database 'default'
)。
您必须通过创建一个完整的 Hive 表,df.write.saveAsTable("bopis_hive")
或者sqlContext.sql("CREATE TABLE bopis_hive as SELECT * from bopis")