Scala Spark,用char值填充整个列
我试图阅读一列,如果在该列中有一个“Y”,我将用“Y”填充新列,否则我将用“N”填充 我正在尝试这样做:Scala Spark,用char值填充整个列,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我试图阅读一列,如果在该列中有一个“Y”,我将用“Y”填充新列,否则我将用“N”填充 我正在尝试这样做: val df1 = df.withColumn("HasChanged", when(Value === "Y"), lit("Y")).otherwise("N"))) 但是只改变有Y的行,我想要的是改变整个列。如何执行此操作?您需要检查所有行中的值是否为Y。您可以使用窗口上比较布尔值的最大值来实现这一点,如
val df1 = df.withColumn("HasChanged", when(Value === "Y"), lit("Y")).otherwise("N")))
但是只改变有Y的行,我想要的是改变整个列。如何执行此操作?您需要检查所有行中的值是否为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|
+----------+-----+----------+
您需要检查所有行中的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|
+----------+-----+----------+
您不需要
当
实际上,您可以使用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|
//+----------+-----+----------+
您不需要
当
实际上,您可以使用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|
//+----------+-----+----------+