PythonでSparkSQLを使用しています。hiveContext を使用して、パーティション化されたテーブル (〜数百のパーティション) を作成し、Hive 内部テーブルに格納しました。ハイブ倉庫はS3にあります。
単純に "df = hiveContext.table("mytable") を実行すると、最初にすべてのパーティションを処理するのに 1 分以上かかります。メタストアにすべてのメタデータが格納されていると思いました。この手順を回避して、起動を高速化することはできますか?
PythonでSparkSQLを使用しています。hiveContext を使用して、パーティション化されたテーブル (〜数百のパーティション) を作成し、Hive 内部テーブルに格納しました。ハイブ倉庫はS3にあります。
単純に "df = hiveContext.table("mytable") を実行すると、最初にすべてのパーティションを処理するのに 1 分以上かかります。メタストアにすべてのメタデータが格納されていると思いました。この手順を回避して、起動を高速化することはできますか?
ここで重要なのは、最初のクエリでのみファイル メタデータをロードするのにこれだけの時間がかかることです。その理由は、SparkSQL がパーティション メタデータを Hive メタストアに格納しないためです。Hive パーティション テーブルの場合、パーティション情報をメタストアに格納する必要があります。テーブルの作成方法に応じて、これがどのように動作するかが決まります。提供された情報から、SparkSQL テーブルを作成したようです。
SparkSQL はテーブル スキーマ (パーティション情報を含む) とテーブルのルート ディレクトリを格納しますが、クエリの実行時に S3 上の各パーティション ディレクトリを動的に検出します。私の理解では、これはトレードオフであるため、テーブルが更新されるたびに新しいパーティションを手動で追加する必要はありません。