2014-11-05 15 views

risposta

1

stai guardando passare la variabile con nello stesso programma/shell, in tal caso la sua in questo modo:

val VAL1 = "testcol" 
val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
sqlContext.sql(s"SELECT * FROM src WHERE col1 = $VAL1").collect().foreach(println) 
+0

Grazie il suo funzionamento. – user3769729

+2

Non sono sicuro del motivo per cui è stato votato, ha funzionato per me nella scintilla 1.5.2. Grazie @Ashrith –

+6

Non è una variabile bind. Stai costruendo una stringa ogni volta. Evey time Spark analizzerà la query, creerà il piano di esecuzione ecc. Lo scopo delle variabili di binding (nei sistemi RDBMS per esempio) è di ridurre i tempi di costruzione del piano di esecuzione. Deve avere un'API speciale per "legare" le variabili. Spark non ha questa funzionalità (da oggi, versione 1.6 di Spark). – Tagar

2

Spark SQL (a partire da versione 1.6) non supporta legare le variabili.

ps. Quello che Ashrith suggerisce non è una variabile di bind. Stai costruendo una stringa ogni volta. Evey time Spark analizzerà la query, creerà il piano di esecuzione ecc. Lo scopo delle variabili di binding (nei sistemi RDBMS per esempio) è di ridurre i tempi di costruzione del piano di esecuzione. Deve avere un'API speciale per "legare" le variabili. Spark non ha questa funzionalità (da oggi, versione 1.6 di Spark).

3

ho verificato che sia Spark shell 2.0.xe shell e Thrift (linea d'aria) pure. Potrei riuscire a associare una variabile nella query Spark SQL con il comando set.

Query senza variabile di legatura:

select count(1) from mytable; 

query con variabili bind (parametrizzato):

1. guscio Spark SQL

set key_tbl=mytable; -- setting mytable to key_tbl to use as ${key_tbl} 
select count(1) from ${key_tbl}; 

2. Spark guscio

spark.sql("set key_tbl=mytable") 
spark.sql("select count(1) from ${key_tbl}").collect() 

Sia w/WO impegnare params la query restituisce un risultato identico.

Nota: non danno alcuna citazioni al valore della chiave come è il nome della tabella qui.

Fammi sapere se ci sono domande.

+0

con val slqDF = spark.sql ("seleziona count (*) da Prd_IN_GeneralEvents dove pdid like $ '{id}'") stesso errore – earl

+0

@jam: prova a stampare l'istruzione 'SELECT' invece di eseguirla. saprai come si sta formando la domanda. – mrsrinivas

0

Pyspark

sqlContext.sql("SELECT * FROM src WHERE col1 = {1} and col2 = {2}".format(VAL1,VAL2).collect().foreach(println)