我想用scala來訪問spark應用程序中的HIVE。如何訪問Hive中的現有表?
我的代碼:
val hiveLocation = "hdfs://master:9000/user/hive/warehouse"
val conf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[*]").set("spark.sql.warehouse.dir",hiveLocation)
val sc = new SparkContext(conf)
val spark = SparkSession
.builder()
.appName("SparkHiveExample")
.master("local[*]")
.config("spark.sql.warehouse.dir", hiveLocation)
.config("spark.driver.allowMultipleContexts", "true")
.enableHiveSupport()
.getOrCreate()
println("Start of SQL Session--------------------")
spark.sql("select * from test").show()
println("End of SQL session-------------------")
但它與錯誤訊息
表或視圖中沒有發現
,但是當我在蜂巢控制檯運行show tables;
,我可以看到結束該表可以運行Select * from test
。全部位於「用戶/配置/倉庫」位置。只是爲了測試,我試着用spark也創建表,只是爲了找出表的位置。
val spark = SparkSession
.builder()
.appName("SparkHiveExample")
.master("local[*]")
.config("spark.sql.warehouse.dir", hiveLocation)
.config("spark.driver.allowMultipleContexts", "true")
.enableHiveSupport()
.getOrCreate()
println("Start of SQL Session--------------------")
spark.sql("CREATE TABLE IF NOT EXISTS test11(name String)")
println("End of SQL session-------------------")
此代碼也正確執行(與成功注意事項),但奇怪的是,我可以從蜂房控制檯找到此表。
即使我在mysql中使用select * from TBLS;
(在我的設置中,我將mysql配置爲配置單元的Metastore),但我沒有找到從spark創建的那些表。
火花位置是否與蜂房控制檯不同?
如果我需要從火花中訪問蜂巢中的現有表,我該怎麼辦?
你可以做'spark.sql(「SELECT * FROM。測試」)節目( )' –
mrsrinivas
同樣的結果和更多我可以從火花創建表,可以做「插入」,但蜂巢控制檯不顯示任何表名稱。很大的困惑是這些桌子在哪裏得到保存? – Biswajit