2016-06-01 7 views
7

Sono nuovo di spark/zeppelin e volevo completare un semplice esercizio, dove trasformerò un file csv da panda a Spark data frame e quindi registrerò la tabella interrogarlo con sql e visualizzarlo usando Zeppelin.Zeppelin - Impossibile interrogare con% sql una tabella Mi sono registrato con pyspark

Ma mi sembra di non riuscire nell'ultimo passaggio.

Sto usando Spark 1.6.1

Ecco il mio codice:

%pyspark 
spark_clean_df.registerTempTable("table1") 
print spark_clean_df.dtypes 
print sqlContext.sql("select count(*) from table1").collect() 

Ecco l'output:

[('id', 'bigint'), ('name', 'string'), ('host_id', 'bigint'), ('host_name', 'string'), ('neighbourhood', 'string'), ('latitude', 'double'), ('longitude', 'double'), ('room_type', 'string'), ('price', 'bigint'), ('minimum_nights', 'bigint'), ('number_of_reviews', 'bigint'), ('last_review', 'string'), ('reviews_per_month', 'double'), ('calculated_host_listings_count', 'bigint'), ('availability_365', 'bigint')] 
[Row(_c0=4961)] 

Ma quando provo ad usare% SQL ottengo questo error:

%sql 
select * from table1 

Table not found: table1; line 1 pos 14 
set zeppelin.spark.sql.stacktrace = true to see full stacktrace 

Qualsiasi l'aiuto sarebbe apprezzato - non so nemmeno dove trovare questo stacktrace e come potrebbe aiutarmi.

Grazie :)

+0

Questo collegamento è stato particolarmente utile quando si ha a che fare con questo problema: http://spark.apache.org/docs/latest/sql-programming-guide.html – StefanK

risposta

3

Zeppelin può creare contesti diversi per i diversi interpreti è possibile che se si eseguisse un codice con il% di accensione e del codice con gli interpreti% pyspark tua Zeppelin può avere due contesti. E quando usi% sql, sta cercando in un altro contesto non in% pyspark. Provare a riavviare Zeppelin ed eseguire il codice% pyspark come prima istruzione e poi% sql come secondo.

Se si passa alla scheda 'Interpreti' è possibile aggiungere zeppelin.spark.sql.stacktrace lì. E dopo il riavvio di Zeppelin vedrai la traccia dello stack completo in un punto in cui hai "Tabella non trovata" ora.

In realtà questo è probabilmente risposta alla tua domanda When registering a table using the %pyspark interpreter in Zeppelin, I can't access the table in %sql

cercare di fare

%pyspark 
    sqlContext = sqlc 

come prime due righe

+0

Ciao, grazie per il suggerimento, ma penso che non sia quello che stavo cercando. Ho ulteriormente testato quale potrebbe essere il problema e ho trovato questa soluzione: devo prima creare uno schema della nuova tabella, creare una tabella vuota basata sullo schema e analizzare il frame di dati colonna per colonna e passare questi valori da data.frame a sql table prima di registrarlo. Altrimenti ciò che registro non è vuoto. Abbastanza fastidioso e poco amichevole da usare ... Quello che ho trovato più semplice è visualizzare i dati con matplotlib e non registrare la tabella come sql per interrogarla e usare le visualizzazioni di Zeppelin. – StefanK

0

sintassi corretta sarebbe:

sqlContext.registerDataFrameAsTable(spark_clean_df, 'table1') 
sqlContext.sql(select * from table1 where ...) 
1

anche correlato allo diversi contesti creati da scintilla controllare la seguente impostazione nell'interprete scintilla

zeppelin.spark.useHiveContext = false 

impostare l'impostazione su 'false'

1

Lei non ha detto quale gruppo interprete si stava utilizzando. Se è livy, non è possibile accedere alle tabelle registrate in %livy.pyspark da %livy.sql. Ho ricevuto questo da here:

for now %livy.sql can only access tables registered %livy.spark, but not %livy.pyspark and %livy.sparkr. 

Se si passa al gruppo spark interprete di serie dovrebbe funzionare. Posso confermarlo usando Spark 1.6.3 e Zeppelin 0.7.0. Speriamo che le persone che lavorano nell'interprete livy risolveranno questa restrizione ...

+0

Per quanto ne so, non esisteva l'interprete% livy.pyspark. Purtroppo, non ho più accesso alla macchina, quindi non posso dirlo con certezza. Grazie per il suggerimento e il collegamento comunque! – StefanK

Problemi correlati