Я столкнулся со сценарием, в котором мне нужно преобразовать выражение spark в выражение sql, а позже мне нужно проанализировать выражение sql обратно в выражение spark.В большинстве случаев это работает нормально, но в некоторых случаях выдает ошибку.
Например, следующее прекрасно работает в spark
val sqlContext = spark.sqlContext
import sqlContext.implicits._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
val df = Seq("Britain", "Germany", "USA", "Russia", "Japan").toDF("Country")
val japan = 'Country === "Japan"
df.filter(japan).show
val sqlExp = japan.expr.sql
println(sqlExp) // output: (`Country` = 'Japan')
df.filter(expr(sqlExp)).show
Но когда я пытаюсь сделать то же самое со следующим выражением, это не получается:
val expression = 'Country.contains("S")
println(expression.expr.sql)
df.filter(expression).show
val parsedExpression = expr(expression.expr.sql) //output: contains(`Country`, 'S')
df.filter(parsedExpression).show
Кажется, что он работает только со стандартным синтаксисом sql.Когда я использую expr("country LIKE '%S%'")
, он может анализировать.
Есть ли способ проанализировать такое выражение sql (которое генерируется искрой) для выражения искры?