Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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

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
查找并替换不工作-dataframe spark scala_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

查找并替换不工作-dataframe spark scala

查找并替换不工作-dataframe spark scala,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,我有以下数据帧: df.show +----------+-----+ | createdon|count| +----------+-----+ |2017-06-28| 1| |2017-06-17| 2| |2017-05-20| 1| |2017-06-23| 2| |2017-06-16| 3| |2017-06-30| 1| 我想将计数值替换为0,其中大于1,即结果数据帧应为: +----------+-----+ | createdon|cou

我有以下数据帧:

df.show

+----------+-----+
| createdon|count|
+----------+-----+
|2017-06-28|    1|
|2017-06-17|    2|
|2017-05-20|    1|
|2017-06-23|    2|
|2017-06-16|    3|
|2017-06-30|    1|
我想将计数值替换为0,其中大于1,即结果数据帧应为:

+----------+-----+
| createdon|count|
+----------+-----+
|2017-06-28|    1|
|2017-06-17|    0|
|2017-05-20|    1|
|2017-06-23|    0|
|2017-06-16|    0|
|2017-06-30|    1|
我尝试了以下表达:

df.withColumn(“count”,当($“count”>1)为0时)。显示

+----------+-----+
| createdon|count|
+----------+-----+
|2017-06-28|    1|
|2017-06-17|    2|
|2017-05-20|    1|
|2017-06-23|    2|
|2017-06-16|    3|
|2017-06-30|    1|
但产出是有限的

+----------+--------+
| createdon|   count|
+----------+--------+
|2017-06-28|    null|
|2017-06-17|       0|
|2017-05-20|    null|
|2017-06-23|       0|
|2017-06-16|       0|
|2017-06-30|    null|

我无法理解为什么显示值
1
null
,以及如何克服这一点。有人能帮我吗?

您需要在
之后链接
否则
指定条件不适用的值;在您的情况下,它将是
count
列本身:

df.withColumn("count", when(($"count" > 1), 0).otherwise($"count"))

这也可以使用
udf
函数来完成

def replaceWithZero = udf((col: Int) => if(col > 1) 0 else col) //udf function

df.withColumn("count", replaceWithZero($"count")).show(false) //calling udf function
注意:
只有在没有内置函数的情况下,才应始终选择udf
函数,因为它需要对列数据进行序列化和反序列化