3

spark-shell (scala) では、org.apache.spark.sql.hive.thriftserver._ をインポートして、HiveThriftServer2.startWithContext(hiveContext) として特定のハイブ コンテキストに対してプログラムで Hive Thrift サーバーを起動し、登録済みの一時テーブルを公開しますその特定のセッション。

Python を使用して同じことを行うにはどうすればよいでしょうか。HiveThriftServer をインポートするための Python のパッケージ/API はありますか? その他の考え/推奨事項をいただければ幸いです。

データフレームの作成に pyspark を使用しました

ありがとう

ラヴィ・ナラヤナン

4

1 に答える 1

5

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 セッションにあるためアクセスできず、メタストアには書き込まれません)

于 2016-12-29T22:03:15.710 に答える