1

Pyspark 2.1ハイブテーブルからテーブルと列の統計を計算するために使用します。

私がする時:

spark.sql("ANALYZE TABLE <table name> COMPUTES STATISTICS")

DESCRIBE EXTENDEDSQL コマンドを使用して統計を収集できます。

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 サポートされていない SQL ステートメント

同じDESCRIBE EXTENDEDクエリを (列名なしで) 再発行しても、CatalogTable に変更は返されません。テーブルの統計情報 (つまり、sizeInBytes と rowCount) しか表示されません。

This other answerは、メタストアの「テーブル」からSpark統計を取得することを示唆していますが、これは私には不可解です...

Spark 内でこれらの列レベルの統計にアクセスするにはどうすればよいですか?


編集:私はこれをさらに調査しました。これにより、質問の範囲を絞り込むことができます:

Hive クライアント (Hive View 2.0) と Spark SQL が同じ場所に統計を書き込まないようです。

  • Spark SQL のANALYZE TABLEメソッドを使用すると、テーブル統計のみが CatalogTable のStatisticsキーに表示されます。

     Statistics: sizeInBytes=15196959528, rowCount=39763901, isBroadcastable=false
    

ただし、Hive View はこれらの統計を認識できず、テーブルの統計には表示されません。

  • 逆に、Hive ビュー内でテーブルまたは列の統計を計算する場合、Spark SQL のDESCRIBE EXTENDED方法でテーブルの統計を収集できますが、それらは CatalogTable のPropertiesキーに表示されます。また、一部の列統計が計算されているかどうかも示します。

    Properties: [numFiles=20, transient_lastDdlTime=1540381765, totalSize=15196959528, COLUMN_STATS_ACCURATE={"COLUMN_STATS":{"bubble_level":"true","bubble_level_n1s":"true","timestamp":"true"}}]
    

したがって、これらの情報は独立しているように見え、私の質問は次のようになります。Spark が実行計画を最適化するために使用できるのはどの部分ですか? これらの質問のいくつかは、Spark の最新バージョンにアップグレードすることで解決できることは理解していますが、現時点ではスケジュールに含まれていません。

上記の Jacek Laskowski の回答DESCRIBE EXTENDEDは、Hive の統計が Spark SQLメソッドを介して利用できる場合に使用できることを示唆しています。

誰でもこれを確認できますか?

これを解決するのを手伝ってくれてありがとう。

4

0 に答える 0