【问题标题】:Using NVL2 and NULLIF in Scala SparkSQL在 Scala SparkSQL 中使用 NVL2 和 NULLIF
【发布时间】:2019-02-28 07:56:51
【问题描述】:

我正在尝试在我的 scala-spark 代码中使用 NVL2 和 NULLIF spark sql 函数,但它不起作用。

这就是我所看到的—— 下面的语句工作正常并返回正确的结果

spark.sql("select columnName, NULLIF(columnName, 'abc') as status from df")

但是,此语句失败并返回以下错误-

df.withColumn('status', NULLIF(columnName, 'abc')) 

error: not found: value NULLIF

我在尝试使用 withColumn() 语法中的 NULLIF、NVL2、LEAST 和 GREATEST 函数时遇到了类似的问题。我错过了什么吗?我试过了

import org.apache.spark.sql.functions._ 
import org.apache.spark.sql.catalyst.expressions._ 
import org.apache.spark.sql.catalyst.analysis._

在我的 scala 代码中,但没有任何帮助。

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    Scala Spark 函数库没有这些函数,但 spark sql 库有这些函数。这就是为什么您不能用作 spark 函数 API 的原因。

    https://spark.apache.org/docs/2.0.2/api/java/org/apache/spark/sql/functions.html

    存在isNull函数,可以结合when/then子句设置值。

    希望对你有帮助。

    【讨论】:

    • 请提供一个例子,如果它是非空的,如何保留旧值而不指定它
    • @PaulVelthuis ,您可以参考spark.apache.org/docs/2.3.0/api/sql/#nullif 的示例。你必须调用 sql 语句。如果你有dataframe,你可以注册临时视图,然后可以根据需要编写带有nullif、nvl、nvl2函数的select语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多