Я использую Pyspark 2.1 для вычисления статистики таблиц и столбцов из таблиц улья.
Когда я делаю:
spark.sql("ANALYZE TABLE <table name> COMPUTES STATISTICS")
Я могу собрать статистику с помощью SQL-команды DESCRIBE EXTENDED:
spark.sql("DESCRIBE EXTENDED <table name>").show()
Однако при вычислении статистики столбца следующим образом:
spark.sql("ANALYZE TABLE <table name> COMPUTES STATISTICS FOR COLUMNS")
Задание отправлено и успешно выполнено, но я не могу собрать статистику с помощью команды SQL, как рекомендовано этот ответ:
spark.sql("DESCRIBE EXTENDED <table name> <column name>").show()
Я получил :
ParseException Unsupported SQL statement
Повторная отправка того же запроса DESCRIBE EXTENDED (без имени столбца) не
вернуть любые изменения в CatalogTable: я могу видеть только статистику таблицы (т.е. sizeInBytes и rowCount).
Этот другой отвечать предлагает получить статистику Spark из «таблицы» в хранилище метаданных, но для меня это непонятно ...
Как я могу получить доступ к этой статистике на уровне столбцов в Spark?
Обновлено: я изучил это дополнительно, что позволяет мне уточнить объем моего вопроса:
Похоже, мой клиент Hive (Hive View 2.0) и Spark SQL не записывают статистику в одно и то же место.
При использовании метода Spark SQL ANALYZE TABLE статистика -only- таблица отображается в ключе Статистика таблицы CatalogTable:
Statistics: sizeInBytes=15196959528, rowCount=39763901, isBroadcastable=false
Однако Hive View игнорирует эту статистику, которая не указана в моей таблице статистики.
И наоборот, при вычислении статистики таблиц или столбцов в Hive View я могу собирать статистику таблиц с помощью метода DESCRIBE EXTENDED Spark SQL, но они появляются в ключе Характеристики моей CatalogTable. Он также указывает, была ли вычислена статистика некоторых столбцов:
Properties: [numFiles=20, transient_lastDdlTime=1540381765, totalSize=15196959528, COLUMN_STATS_ACCURATE = {"COLUMN_STATS":{"bubble_level":"true","bubble_level_n1s":"true","timestamp":"true"}}]
Таким образом, эти части информации кажутся независимыми, и тогда у меня возникает вопрос: какую часть может использовать Spark для оптимизации плана выполнения? Я понимаю, что некоторые из этих вопросов можно решить, обновив Spark до последней версии, но на данный момент это не входит в мой график.
Вышеупомянутый отвечать Яцека Ласковски предлагает использовать статистику Hive, если она доступна через метод Spark SQL DESCRIBE EXTENDED.
Кто-нибудь может это подтвердить?
Заранее большое спасибо за помощь в прояснении этого вопроса.
Серж, я использую hiveQL API, потому что я хочу не только получать статистику: я хочу сохранить их в хранилище метаданных и оценить влияние предварительного вычисления статистики Hive на мои задания Spark. В основном я намерен эмпирически решить эту нерешенный вопрос.





Я бы посоветовал вам использовать DataFrame API, например,
df = spark.read.table("<table name>"), затемdf.select("<your_column>").describe().