2017-10-24 5 views
2

SparkSessionを使用して、Hive内のテーブルのリストを取得したり、下のコードのようにHiveテーブルにアクセスしたりすることができます。今私の質問は、この場合、私はハイブコンテキストでスパークを使用しているのですか?SparkSessionは常にハイブコンテキストを使用しますか?

Sparkでハイブコンテキストを使用するには、HiveContextオブジェクトを直接使用してテーブルにアクセスし、他のハイブ関連の関数を実行する必要がありますか?

spark.catalog.listTables.show 
val personnelTable = spark.catalog.getTable("personnel") 

答えて

2

Iはハイブのテーブルのリストを取得し、以下のコードに示すように、ハイブのテーブルにアクセスするSparkSessionを使用することができます。

はい、できます。

この場合、私はHive ContextでSparkを使用していますか?

どのようにspark値を作成したかによって異なります。

SparkSessionは、enableHiveSupportメソッドに付属のBuilderインターフェイスを持ちます。

enableHiveSupport():ビルダーは、永続的なハイブメタストア、ハイブSERDESのサポート、およびハイブユーザ定義関数への接続を含む、ハイブサポートを有効にします。

この方法を使用した場合、Hiveのサポートが得られます。そうでなければ、あなたはそれを持っていません。

spark.catalogは何とかHiveに関連していると思われるかもしれません。さて、Hiveサポートを提供することを意図していましたが、デフォルトでカタログはin-memoryです。

カタログ:ユーザーが作成することができ、それを通してカタログインタフェース、ドロップ、変更または照会基礎となるデータベース、テーブル、関数など

spark.catalogがスパークSQLは、2つの実装が付属していますちょうどインタフェースです - in-memory(デフォルト)とhiveです。

さて、あなたは自分自身にこの質問をされることがあります。

はハイブサポートが有効になっているかどうかを調べるために、このようspark.conf介するなど、とにかくありますか?私はあなたがにしているので、実際のところ、あなたがこの方法を必要としないあなたはハイブ認識SparkSessionないか(とあなたが働くかどうかを知るために使用できることを知って何isHiveEnabled方法または類似はありません

SparkSessionインスタンスを作成する責任があるので、Sparkアプリケーションが何をしているかを知る必要があります)。あなたがSparkSessionインスタンス(例えばspark-shellまたはDatabricks)、特定のSparkSesssionは、ハイブのサポートは、カタログの実装の種類を確認することです有効になっているかどうかを確認するための唯一の方法が与えられている環境では

。あなたが使用HiveSessionCatalogが表示された場合

scala> spark.sessionState.catalog 
res1: org.apache.spark.sql.catalyst.catalog.SessionCatalog = [email protected] 

は、SparkSessionインスタンスはハイブ-認識しています。

+0

spark-shellなどのSparkSessionが与えられたとします。 enableHiveSupport()がこのSparkSessionに対して既に呼び出されているかどうかを知るにはどうしますか?または、このSparkSessionに対してenableHiveSupport()を呼び出すことは可能ですか? – user1888243

+0

@ user1888243非常に良い質問と私は私の答えを拡大する(とポイントにする)それらを使用します。ありがとう! –

関連する問題