SQL-запрос перевести на искровой язык в Zeppelin - PullRequest
2 голосов
/ 17 октября 2019

Я пытаюсь перевести SQL-запрос на спарк-лэнг. Вот запрос sql:

%sql
select ${checkbox:fields=AGE|NAME|SEX} from table limit ${limit=10}

Затем я передаю искровой язык:

%spark
var fields = z.select("fields", Seq(("AGE","AGE"),("NAME","NAME"),("SEX","SEX"))
val lim = z.input("limit","20")
df.selectExpr(fields).limit(lim).show()

, но он не работает. Как его собрать?

1 Ответ

0 голосов
/ 17 октября 2019

Есть несколько вещей, которые вы здесь упустили.

  • В sql вы используете флажок, а в scala / spark вы используете select. В флажке вы можете выбрать несколько значений, в то время как в выборе вы можете выбрать только 1 значение. В остальной части ответа я предполагаю, что вы хотите сделать множественный выбор.

  • Попробуйте это в scala:

 val f = z.checkbox("fields", options).to[collection.immutable.Seq]
 val lim = z.input("limit","20").asInstanceOf[String].toInt
 //Assuming df is already defined
 df.selectExpr(f.map(c => (c+"")): _*).limit(lim).show()
 df.select(f.map(c => col(c+"")): _*).limit(lim).show()

z.input возвращаетобъект. предел в искре DF принимает значение Int как входное, поэтому мы преобразовали его в Int. z.checkbox возвращает scala.collection.Iterable, в то время как selectExpr / select требует ввода разных типов.

...