2014-11-05 4 views

ответ

1

Вы ищете при прохождении переменной из с в одной и той же программы/оболочки, если так его так:

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

Благодаря его работы. – user3769729

+2

Я не уверен, почему это было проголосовано, это сработало для меня в искры 1.5.2. Спасибо @Ashrith –

+6

Это не переменная связывания. Вы каждый раз создаете строку. Время Evey Spark проанализирует запрос, создаст план выполнения и т. Д. Назначение переменных привязки (например, в системах РСУБД) - сократить время на выполнение плана выполнения. Он должен иметь специальный API для привязки переменных. Spark не имеет этой функциональности (на сегодняшний день выпуска Spark 1.6). – Tagar

2

Спарк SQL (как 1,6-релиз) не поддерживает свяжите переменные.

пс. То, что предлагает Ашрит, не является переменной связывания. Вы каждый раз создаете строку. Время Evey Spark проанализирует запрос, создаст план выполнения и т. Д. Назначение переменных привязки (например, в системах РСУБД) - сократить время на выполнение плана выполнения. Он должен иметь специальный API для привязки переменных. Spark не имеет этой функциональности (на сегодняшний день выпуска Spark 1.6).

3

Я проверил его в обоих Спарк оболочки 2.0.x оболочки и бережливости (БИЛАЙН) а. Я смог связать переменную в запросе Spark SQL с командой set.

запросы без переменного связывания:

select count(1) from mytable; 

запрос с переменным связыванием (параметризованным):

1. Свеча SQL-оболочки

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

2. Свеча оболочки

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

Оба ж/w.o связывают PARAMS запрос возвращает идентичный результат.

Примечание: Не давать какие-либо котировки на значение ключа, как это имя таблицы здесь.

Дайте мне знать, если возникнут какие-либо вопросы.

+0

с val slqDF = spark.sql ("select count (*) from Prd_IN_GeneralEvents где pdid как $ '{id}'") То же самое об ошибке – earl

+0

@jam: Попробуйте распечатать инструкцию SELECT, а не запускать ее. вы будете знать, как формируется запрос. – mrsrinivas

0

Pyspark

sqlContext.sql("SELECT * FROM src WHERE col1 = {1} and col2 = {2}".format(VAL1,VAL2).collect().foreach(println) 
Смежные вопросы