我想用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