2014-10-29 75 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中)