Apache spark 无法解析spark自身生成的SQL表达式字符串
我遇到了一个场景,需要将spark表达式转换为sql表达式,然后需要将sql表达式解析回spark表达式。在大多数情况下,它工作正常,但在某些情况下会抛出错误 例如,在spark中,以下操作可以很好地工作Apache spark 无法解析spark自身生成的SQL表达式字符串,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我遇到了一个场景,需要将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
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(“类似于“%S%”的国家”)时
它能够解析
有没有办法将这样一个sql表达式(由spark生成)解析回spark表达式
Expression.sql
方法:
- 不是官方公开API的一部分(正如开发者在
应被视为“弱”私有)o.a.s.sql中多次指出的那样。catalyst
- 不是明确用于生成有效的SQL字符串,甚至可以是任意字符串/
事实上,
Country包含(
在,'S')
(或sql
)和spark sql
中都无效expr
包含