Передача параметров в Spark SQL - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно передать параметры в Spark SQL. Например, у меня есть следующий запрос как Val timestamp = spark. sql ("выбрать метку времени из таблицы") Теперь у меня есть другой запрос, чтобы передать эту метку времени, где класс Spark. sql (s "выберите col1 из таблицыb где timestamp = '$ timestamp' ").

Но приведенный выше запрос возвращает ошибку несоответствующего выражения. Может кто-нибудь, пожалуйста, предложите решение

1 Ответ

0 голосов
/ 04 февраля 2020

В этом случае запрос val timestamp =spark.sql("select timestamp from tablea ") возвращает новый фрейм данных, который выглядит как timestamp : org.apache.spark.sql.DataFrame = [timestamps: bigint]. Вот почему вы не можете передать его в следующий запрос выбора.

Я вижу по крайней мере два способа решения этой проблемы:

1) Используйте объединение:

spark.sql("select a.col1 from tableb a join tablea b on a.timestamp = b.timestamp")

2) Преобразовать метку времени в строку:

val timestampString = "("+myTimestamp.collect.map(r => r(0)).mkString(",")+")"
spark.sql(s"select col1 from tableb where timestamp = $timestampString ")
...