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中文网其他相关文章!