Из того, что я вижу, ваш столбец имеет числовой тип. Также вы не можете заменить нулевое значение недопустимым значением в Spark. Поэтому в вашем случае вы не можете использовать строку ("" в вашем случае). Вот пример, который иллюстрирует это:
Dataset<Row> df = spark.range(10)
.select(col("id"),
when(col("id").mod(2).equalTo(lit(0)), null )
.otherwise(col("id").cast("string")).as("string_col"),
when(col("id").mod(2).equalTo(lit(0)), null )
.otherwise(col("id")).as("int_col"));
df.na().fill("").show();
А вот и результат
+---+----------+-------+
| id|string_col|int_col|
+---+----------+-------+
| 0| | null|
| 1| 1| 1|
| 2| | null|
| 3| 3| 3|
| 4| | null|
| 5| 5| 5|
| 6| | null|
| 7| 7| 7|
| 8| | null|
| 9| 9| 9|
+---+----------+-------+
Работает для строки, но не для целого числа. Обратите внимание, что я использовал функцию cast
, чтобы превратить int в строку и заставить код работать. Это может быть хорошим решением в вашей ситуации.