首页  >  文章  >  后端开发  >  如何在 Spark DataFrames 中实现'IF THEN ELSE”逻辑?

如何在 Spark DataFrames 中实现'IF THEN ELSE”逻辑?

Patricia Arquette
Patricia Arquette原创
2024-11-19 12:06:02820浏览

How to Implement

Spark 相当于“IF then ELSE”

简介:

Spark DataFrame 转换提供操纵数据的强大方法。一种常见的操作涉及根据变量值有条件地应用转换。了解 Spark 中相当于 SQL 中的“IF then ELSE”语句对于此类任务至关重要。

问题:

用户正在尝试将新列添加到基于条件规则的 Spark DataFrame。然而,当尝试在多个条件下使用 F.when 函数时,他们会遇到 TypeError。

TypeError: when() takes exactly 2 arguments (3 given)

答案:

发生错误是因为 F.when Spark 中的函数需要两个参数:一个条件和满足条件时返回的值。用户的代码包含一个附加参数,即另一个 F.when 条件,这是不正确的语法。

Spark 中使用 F.when 的“IF then ELSE”等效项的正确语法是:

(when(col("iris_class") == 'Iris-setosa', 0)
.when(col("iris_class") == 'Iris-versicolor', 1)
.otherwise(2))

or:

(when(col("iris_class") == 'Iris-setosa', 0)
    .otherwise(when(col("iris_class") == 'Iris-versicolor', 1)
        .otherwise(2)))

第一个语法使用嵌套的 F.when 条件,而第二个语法使用 F.otherwise 函数。

等效的 SQL 语句将是 CASE 表达式:

CASE WHEN (iris_class = 'Iris-setosa') THEN 0 
     ELSE CASE WHEN (iris_class = 'Iris-versicolor') THEN 1 
               ELSE 2 
          END 
END

Spark 还支持 Hive IF 条件语法,但仅限于支持 Hive 的原始 SQL:

IF(condition, if-true, if-false)

以上是如何在 Spark DataFrames 中实现'IF THEN ELSE”逻辑?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn