无法从 impala/hive/spark sql 访问“spark 注册表”
Posted
技术标签:
【中文标题】无法从 impala/hive/spark sql 访问“spark 注册表”【英文标题】:Can't access "spark registered table" from impala/hive/spark sql 【发布时间】:2014-10-29 15:47:07 【问题描述】:我使用 Scala 在 Spark 中创建了一个数据源。我有一个案例类并创建了一个 RDD 并将其注册为一个表。就像 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)
但是我无法访问 hive、impala 或 spark-sql 中的表。 “显示表格”命令不显示表格。关于如何实现这一点的任何想法?
谢谢!
【问题讨论】:
【参考方案1】:您在本地创建的表和配置单元元存储之间没有连接。
要通过 hive 访问您的表,您应该以某种方式生成 parquet 文件(您的代码没问题),将它们添加到 hive 元存储(使用create table ...
),然后通过 hive 连接使用它或创建 hive 上下文(org.apache.spark.sql.hive.HiveContext
)
简而言之,您应该区分本地使用的元数据(使用registerTempTable
创建)和持久配置单元元数据(存储在元存储中)
【讨论】:
以上是关于无法从 impala/hive/spark sql 访问“spark 注册表”的主要内容,如果未能解决你的问题,请参考以下文章
无法从 Data Fusion 连接 Cloud SQL mySql 实例。异常“无法创建套接字工厂 'com.google.cloud.sql.mysql.SocketFactory”