Spark UDF不会将列值从null更改为0

时间:2019-05-15 20:03:51

标签: scala apache-spark apache-spark-sql spark-streaming

尝试使用以下UDF在数据框中将null替换为0。 我可能会出错的地方,代码看起来很简单,但是却没有按预期工作。

我试图创建一个UDF来替换任何值为空的列中的0。

谢谢大家。

 * +------+----+--------------+
  * |  name| age|ageNullReplace|
  * +------+----+--------------+
  * |miguel|null|             0|
  * | luisa|  21|            21|
  * +------+----+--------------+

预期输出:

{{1}}

2 个答案:

答案 0 :(得分:2)

不需要UDF。您可以将na.fill应用于DataFrame中特定类型的列的列表,如下所示:

import org.apache.spark.sql.functions._
import spark.implicits._

val df = Seq(
  ("miguel", None), ("luisa", Some(21))
).toDF("name", "age")

df.na.fill(0, Seq("age")).show
// +------+---+
// |  name|age|
// +------+---+
// |miguel|  0|
// | luisa| 21|
// +------+---+

答案 1 :(得分:1)

您可以将WithColumn与when条件一起使用,如下所示 代码未经测试

df.withColumn("ageNullReplace", when(col("age").isNull,lit(0)).otherwise(col(age)))

以上代码中的

否则,仅需供参考即可

希望有帮助