我在将数据框添加到临时表之后,尝试运行SQL查询,但每次显示未找到表。
emp
是dataframe的名称。
命令:
scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sqlContext: org.apache.spark.sql.SQLContext = org.apache.spark.sql.SQLContext@6cb7a4c1
scala> import sqlContext.implicits._
import sqlContext.implicits._
scala> emp.registerTempTable("people")
scala> val teenagers = sqlContext.sql("SELECT name FROM people WHERE id >= 100 AND id <= 105")
java.lang.RuntimeException: Table Not Found: people
at scala.sys.package$.error(package.scala:27)
at org.apache.spark.sql.catalyst.analysis.SimpleCatalog$$anonfun$1.apply(Catalog.scala:111)
at org.apache.spark.sql.catalyst.analysis.SimpleCatalog$$anonfun$1.apply(Catalog.scala:111)
at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
at scala.collection.AbstractMap.getOrElse(Map.scala:58)
at org.apache.spark.sql.catalyst.analysis.SimpleCatalog.lookupRelation(Catalog.scala:111)
我解决了它。显然,我直接使用了从RDD创建的DF。如果我创建DF的副本(从RDD派生),则寄存器Temptable将起作用。感谢您的帮助。