首页 > 解决方案 > Spark,检查某些列是否为 True,然后用 Y 或 N 填充新列

问题描述

我正在尝试用 Y 或 N 填充新列。为此,我检查了两列,如果其中一列具有 True 值,则将 Y 放入新列,否则放入 N。

例如,我有这个数据框

+--------------+----------+----------+------------------+--------+--------+-------------------+
|Date          |Col1      | Col2     |ChangeinCol1_Col2 | Col3   | Col4   | ChangeinCol3_Col4 |
+--------------+----------+----------+------------------+--------+--------+-------------------+
|2020-12-14    |True      | False    |     Y            | False  | False  |       N           |
|2020-12-14    |False     | False    |     Y            | False  | False  |       N           |

如果 Col1 或 Col2 中存在 True,则 ChangeinCol1_Col2 列将为 Y,与 ChangeinCol3_Col4 相同,但在这种情况下有 N,因为 Col3 和 Col4 没有变化。

我怎么能用 Scala 中的 Apache Spark 做到这一点?我正在尝试使用 df.withColumn 创建新列,但不知道如何检查列中的值。

标签: scalaapache-spark

解决方案


您可以使用when

import org.apache.spark.sql.expressions.Window

val df2 = df.withColumn(
    "ChangeinCol1_Col2",
    when(max($"Col1").over(Window.orderBy()) || max($"Col2").over(Window.orderBy()), lit("Y")).otherwise(lit("N"))
).withColumn(
    "ChangeinCol3_Col4",
    when(max($"Col3").over(Window.orderBy()) || max($"Col4").over(Window.orderBy()), lit("Y")).otherwise(lit("N"))
)

推荐阅读