查找并替换不工作-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
函数,因为它需要对列数据进行序列化和反序列化