Spark SQL - 未找到已注册的临时表

Posted

技术标签:

【中文标题】Spark SQL - 未找到已注册的临时表【英文标题】:Spark SQL - registered temporary table not found 【发布时间】:2016-06-12 20:45:55 【问题描述】:

我运行以下命令:

spark-shell --packages datastax:spark-cassandra-connector:1.6.0-s_2.10

然后我停止上下文:

sc.stop

然后我在 REPL 中运行这段代码:

val conf = new org.apache.spark.SparkConf(true).set("spark.cassandra.connection.host", "127.0.0.1")
val sc = new org.apache.spark.SparkContext(conf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val cc = new org.apache.spark.sql.cassandra.CassandraSQLContext(sc)

cc.setKeyspace("ksp")

cc.sql("SELECT * FROM continents").registerTempTable("conts")

val allContinents = sqlContext.sql("SELECT * FROM conts").collect

我得到:

org.apache.spark.sql.AnalysisException: Table not found: conts;

键空间ksp 和表continents 是在Cassandra 中定义的,所以我怀疑错误不是来自那一侧。

(Spark 1.6.0,1.6.1)

【问题讨论】:

【参考方案1】:

因为您使用不同的上下文来创建数据框并执行 SQL。

val conf = new 
org.apache.spark.SparkConf(true).set("spark.cassandra.connection.host", "127.0.0.1")
val sc = new org.apache.spark.SparkContext(conf)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
val cc = new org.apache.spark.sql.cassandra.CassandraSQLContext(sc)

cc.setKeyspace("ksp")

cc.sql("SELECT * FROM continents").registerTempTable("conts")

// use cc instead of sqlContext
val allContinents = cc.sql("SELECT * FROM conts").collect

【讨论】:

以上是关于Spark SQL - 未找到已注册的临时表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spark SQL 中缓存和持久化临时表?

Spark sql注册的临时表不能在sqlContext.read()中使用?

Spark:通过对临时表执行 sql 查询来创建临时表

DataFrame映射表的形式

Spark SQL 2.1 是不是支持将临时表或配置单元表写入 Mysql/Oracle?

如何将 Excel 中的数据插入 Spark SQL 中的临时表中