Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 无法解析spark自身生成的SQL表达式字符串_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 无法解析spark自身生成的SQL表达式字符串

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

我遇到了一个场景,需要将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(“类似于“%S%”的国家”)时
它能够解析

有没有办法将这样一个sql表达式(由spark生成)解析回spark表达式


Expression.sql
方法:

  • 不是官方公开API的一部分(正如开发者在
    o.a.s.sql中多次指出的那样。catalyst
    应被视为“弱”私有)
  • 不是明确用于生成有效的SQL字符串,甚至可以是任意字符串/

    事实上,
    包含(
    Country
    ,'S')
    sql
    (或
    spark sql
    )和
    expr
    中都无效


您收到的错误消息是什么?另外,我在中没有看到这样的函数
包含