Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark,用char值填充整个列_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

Scala Spark,用char值填充整个列

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。您可以使用窗口上比较布尔值的最大值来实现这一点,如

我试图阅读一列,如果在该列中有一个“Y”,我将用“Y”填充新列,否则我将用“N”填充

我正在尝试这样做:

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|
//+----------+-----+----------+