2017-04-15 7 views
0

Ich habe drei Zeppelin (0,6) Die Absätze:Zeppelin% ​​sql nicht temporäre Tabelle zugreifen

para1:

val hc = new org.apache.spark.sql.hive.HiveContext(sc) 
val df = hc.sql("SELECT * FROM tweetsORC") 
z.put("wds", df) 

para2:

import org.apache.spark.sql.DataFrame        
import sqlContext.implicits._ 
import org.apache.spark.sql.functions._ 

val df = z.get("wds").asInstanceOf[DataFrame] 
df.select(explode($"filtered").as("value")).groupBy("value").count().sort(desc("count")).show(20, false) 
df.registerTempTable("top20") 

para3:

%sql 
select * from top20 

Dies gibt den folgenden Fehler:

Ich nehme an, das liegt daran, dass die Tabelle Teil des Hivecontext ist und sql es nicht sehen kann. Ich habe einige Lösungen zu ähnlichen Problemen gesehen, die vorschlagen, dass ein sqlcontext das Problem ist, aber ich habe das nicht getan. Wie kann der% sql-Absatz auf die temporäre Tabelle zugreifen? Alle Hinweise werden sehr geschätzt. (Ich möchte% sql für die schönen integrierten Graphen verwenden).

Antwort

2

Interoperabilität zwischen Interpretern wird nur bereitgestellt, wenn Sie die Kontexte verwenden, die Ihnen vom Zeppelin zur Verfügung gestellt werden (wie sqlContext). Sobald Sie Ihren eigenen Kontext hier erstellen:

val hc = new org.apache.spark.sql.hive.HiveContext(sc) 

es nicht in irgendeiner Weise in den Kontext von %sql und Table not found verwendet verbunden ist, ist der erwartete Fehler.

Lösung: Verwenden Sie sqlContext zum Erstellen und Registrieren von Tabellen.

+1

Danke Benutzer. Kannst du etwas weiter erklären? Bedeutet das, dass ich einfach val df = hc.sql ("SELECT * FROM tweetsORC") zu val df = sqlContext.sql ("SELECT * FROM tweetsORC") ändern kann? – schoon

+0

Ja, das funktioniert. Vielen Dank! – schoon

Verwandte Themen