Может ли предложение Spark Dataframe принимать переменную в качестве аргумента? - PullRequest
0 голосов
/ 10 января 2019

Я работаю где пункт из Spark Dataframe. Когда я помещаю строковую переменную в качестве аргумента, я получаю сообщение об ошибке. Если я скопирую эту строку и добавлю ее в запрос, это сработает.

val a = """col("foo")==="bar" || col("abc")==="def""""
val df = df_.where(a)
org.apache.spark.sql.catalyst.parser.ParseException:

== SQL ==
col("foo")==="bar" || col("abc")==="def"
---------------^^^

Если я пытаюсь без использования переменной, это работает.

val df = df_.where(col("foo")==="bar" || col("abc")==="def")

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Не как String, но вы можете сохранить условие where как значение типа Column, как показано ниже:

import org.apache.spark.sql.functions._
import org.apache.spark.sql.Column

val df = Seq(
  ("bar", "x"), ("zz", "y"), ("mm", "def")
).toDF("foo", "abc")

val cond: Column = col("foo") === "bar" || col("abc") === "def"

df.where(cond).show
// +---+---+
// |foo|abc|
// +---+---+
// |bar|  x|
// | mm|def|
// +---+---+
0 голосов
/ 10 января 2019

Если выражение является строкой, это должен быть синтаксически допустимый SQL, т.е.

"""foo = 'bar' AND abc = 'def'"""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...