2017-09-04 11 views
0

Pysparkからリモートハイブサーバに格納されているデータを読み書きしようとしています。私は、この例では、次のとおりです。Pyspark:リモートハイブサーバでデータを選択

from os.path import expanduser, join, abspath 

from pyspark.sql import SparkSession 
from pyspark.sql import Row 

# warehouse_location points to the default location for managed databases and tables 
warehouse_location = 'hdfs://quickstart.cloudera:8020/user/hive/warehouse' 

spark = SparkSession \ 
    .builder \ 
    .appName("Python Spark SQL Hive integration example") \ 
    .config("spark.sql.warehouse.dir", warehouse_location) \ 
    .enableHiveSupport() \ 
    .getOrCreate() 

例が倉庫に新しいテーブルを作成する方法を示しています。

# spark is an existing SparkSession 
spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive") 
spark.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src") 

# Queries are expressed in HiveQL 
spark.sql("SELECT * FROM src").show() 

しかし、私はmytest.dbで作成された既存の田部irisにアクセスする必要があるので、テーブルの場所は

です
table_path = warehouse_location + '/mytest.db/iris` 

既存のテーブルの選択方法は?上記のコードで倉庫場所としてhdfs://quickstart.cloudera:8020/user/hive/warehouseを使用してしようとしたとき

hdfs://quickstart.cloudera:8020/user/hive/warehouse/mytest.db/iris 

http://test.mysite.net:8888/metastore/table/mytest/iris 

及びテーブル位置URL:

更新

Iは、メタストアのURLを有する

spark.sql("use mytest") 

は、私は例外を取得:

raise AnalysisException(s.split(': ', 1)[1], stackTrace) 
pyspark.sql.utils.AnalysisException: "Database 'mytest' not found;" 

irisから選択するための正しいURLでしょうか?

答えて

0

あなたが

spark.sql("SELECT * FROM mytest.iris") 

それとも、

spark.sql("use mytest") 
spark.sql("SELECT * FROM iris) 
+0

おかげで、作業するデータベースを指定を使用してテーブルを直接呼び出すことができます!私の質問への更新を見てください。私は何を使用するURLを把握することはできません、助けてください。 – dokondr