2017-12-05 1 views
0

Ich versuche SQL-Abfrage nach dem Hinzufügen meiner Datenframe zu einer temporären Tabelle, aber jedes Mal zeigt Tabelle nicht gefunden.Spark SQL-Tabelle nicht gefunden nach RegisterTempTable

emp ist der Name des Datenrahmens.

BEFEHLE:

scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
sqlContext: org.apache.spark.sql.SQLContext = [email protected] 

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) 
+0

Wie Sie einen Datenrahmen erstellen -> emp. –

+0

und Sie laufen hier, wo scala repl oder Spark-Shell? Welche Version von Funken verwendest du? – eliasah

+1

Geben Sie an, wo Sie den Datenrahmen "emp" erstellen. Wird der Datenrahmen "emp" mit demselben "sqlContext erstellt: org.apache.spark.sql.SQLContext = [email protected]". Wenn nicht, wird es in diesem Kontext nicht sichtbar sein. Erstellen Sie den Datenrahmen, registrieren Sie die temporäre Tabelle und die Abfrage aus der Tabelle mit demselben Kontext. –

Antwort

0

Ich habe es Jungs gelöst. Anscheinend habe ich direkt einen DF verwendet, der aus RDD erstellt wurde. Wenn ich ein Duplikat des DF (abgeleitet von RDD) erstelle, wird registerTempTable funktionieren. Danke für die Hilfe.

Verwandte Themen