scala spark,用char值填充整个列

kpbwa7wx  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(305)

我正在读一列,如果在那列中有一个“y”,我将用“y”填充新列,否则我将用“n”填充新列。

+--------------+---------------------+-------------------+
|Date          |        Value        | HasChanged        |
+--------------+---------------------+-------------------+
|2020-12-14    |        N            |     Y             |
|2020-12-14    |        Y            |     Y             |
|2020-12-14    |        N            |     Y             |
|2020-12-14    |        N            |     Y             |

+--------------+---------------------+-------------------+
|Date          |        Value        | HasChanged        |
+--------------+---------------------+-------------------+
|2020-12-14    |        N            |     N             |
|2020-12-14    |        N            |     N             |
|2020-12-14    |        N            |     N             |
|2020-12-14    |        N            |     N             |

我正在尝试:

val df1 = df.withColumn("HasChanged", when(Value === "Y"), lit("Y")).otherwise("N")))

但是只改变有y的行,我想要的是改变整个列。我该怎么做?

5gfr0r5j

5gfr0r5j1#

您需要检查所有行中的value=y。您可以使用窗口上比较布尔值的最大值来实现这一点,如果一行或多行为true,则为true;如果每行为false,则为false。

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

val df1 = df.withColumn(
    "HasChanged",
    when(max($"Value" === "Y").over(Window.orderBy()), "Y").otherwise("N")
)

df1.show

+----------+-----+----------+
|      Date|Value|HasChanged|
+----------+-----+----------+
|2020-12-14|    N|         Y|
|2020-12-14|    Y|         Y|
|2020-12-14|    N|         Y|
|2020-12-14|    N|         Y|
+----------+-----+----------+
nfg76nw0

nfg76nw02#

你不需要 when 实际上,你可以用 max 作为 Y > N :

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

val df1 = df.withColumn("HasChanged", max(col("Value")).over(Window.orderBy()))

df1.show

//+----------+-----+----------+
//|      Date|Value|HasChanged|
//+----------+-----+----------+
//|2020-12-14|    N|         Y|
//|2020-12-14|    Y|         Y|
//|2020-12-14|    N|         Y|
//|2020-12-14|    N|         Y|
//+----------+-----+----------+

相关问题