2014-10-29 50 views
0

我使用scala在spark中創建數據源。我有一個案例類,並創建了一個RDD並將其註冊爲一個表。就像火花文檔中給出的例子一樣。無法從impala/hive/spark sql訪問「spark註冊表」

val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
import sqlContext.createSchemaRDD 
case class Person(name: String, age: Int) 
val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)) 
people.registerAsTable("people") 
val teenagers = sqlContext.sql("SELECT name FROM people WHERE age >= 13 AND age <= 19") 
teenagers.map(t => "Name: " + t(0)).collect().foreach(println) 

但是我無法訪問配置單元,impala或spark-sql中的表。 「顯示錶格」命令不顯示錶格。任何想法如何實現這一目標?

謝謝!

回答

2

您本地創建的表與配置單元Metastore之間沒有連接。

若要通過蜂巢連接訪問您通過蜂巢,你應該以某種方式產生拼花文件(你的代碼是確定),將它們添加到蜂巢metastore(與create table ...)表,下次使用它,或者創建蜂巢上下文(org.apache.spark.sql.hive.HiveContext

總之,您應該區分本地使用的元數據(使用registerTempTable創建)和持久配置單元元數據(存儲在Metastore中)