Попытка заменить ноль на 0 в кадре данных, используя UDF ниже.
Там, где я могу ошибаться, код кажется простым, но он работает не так, как ожидалось.
Я пытался создать UDF, который заменяет 0 в любом столбце со значением null.
Спасибо всем заранее.
//imports
object PlayGround {
def missingValType2(n: Int):Int = {
if(n == null){
0
}else{
n
}
}
def main(args: Array[String]): Unit = {
Logger.getLogger("org").setLevel(Level.ERROR)
val spark = SparkSession
.builder()
.appName("PlayGround")
.config("spark.sql.warehouse.dir", "file:///C:/temp")
.master("local[*]")
.getOrCreate()
val missingValUDFType2 = udf[Int, Int](missingValType2)
val schema = List(
StructField("name", types.StringType, false),
StructField("age", types.IntegerType, true)
)
val data = Seq(
Row("miguel", null),
Row("luisa", 21)
)
val df = spark.createDataFrame(
spark.sparkContext.parallelize(data),
StructType(schema)
)
df.show(false)
df.withColumn("ageNullReplace",missingValUDFType2($"age")).show()
}
}
/**
* +------+----+
* |name |age |
* +------+----+
* |miguel|null|
* |luisa |21 |
* +------+----+
*
* Below is the current output.
* +------+----+--------------+
* | name| age|ageNullReplace|
* +------+----+--------------+
* |miguel|null| null|
* | luisa| 21| 21|
* +------+----+--------------+*/
Ожидаемый результат:
* +------+----+--------------+
* | name| age|ageNullReplace|
* +------+----+--------------+
* |miguel|null| 0|
* | luisa| 21| 21|
* +------+----+--------------+