py4j Java ゲートウェイを使用してインポートできます。次のコードは、spark 2.0.2 で機能し、beeline を介して Python スクリプトに登録された一時テーブルをクエリできました。
from py4j.java_gateway import java_import
java_import(sc._gateway.jvm,"")
spark = SparkSession \
.builder \
.appName(app_name) \
.master(master)\
.enableHiveSupport()\
.config('spark.sql.hive.thriftServer.singleSession', True)\
.getOrCreate()
sc=spark.sparkContext
sc.setLogLevel('INFO')
#Start the Thrift Server using the jvm and passing the same spark session corresponding to pyspark session in the jvm side.
sc._gateway.jvm.org.apache.spark.sql.hive.thriftserver.HiveThriftServer2.startWithContext(spark._jwrapped)
spark.sql('CREATE TABLE myTable')
data_file="path to csv file with data"
dataframe = spark.read.option("header","true").csv(data_file).cache()
dataframe.createOrReplaceTempView("myTempView")
次に、ビーラインに移動して、正しく開始されたかどうかを確認します。
in terminal> $SPARK_HOME/bin/beeline
beeline> !connect jdbc:hive2://localhost:10000
beeline> show tables;
上記の「myTable」と「myTempView」を含む、Python で作成されたテーブルと一時テーブル/ビューが表示されます。一時ビューを表示するには、同じ Spark セッションが必要です。
( ans:プログラムで作成されたコンテキストで HiveThriftServer2 を開始しないでください。
注: Thrift サーバーがターミナルから開始され、同じメタストアに接続されている場合でも、Hive テーブルにアクセスすることは可能ですが、一時ビューは Spark セッションにあるためアクセスできず、メタストアには書き込まれません)