Вы можете использовать оператор CASE, чтобы справиться с этим. Coalesce используется для замены NULL некоторым значением и не может использоваться для проверок NULL.
import org.apache.spark.sql.expressions.Window
case class Salary(depName: String, empNo: Long, salary: Long)
val empsalary = Seq(
Salary("sales", 1, 5000),
Salary("sales", 3, 4800),
Salary("sales", 4, 4800),
Salary("personnel", 0, 3500),
Salary("develop", 7, 4200),
Salary("develop", 8, 6000),
Salary("develop", 9, 4500),
Salary("develop", 10, 5200),
Salary("develop", 11, 5200)).toDS
empsalary.show(2)
+---------+-----+------+
| depName|empNo|salary|
+---------+-----+------+
| sales| 1| 5000|
|personnel| 2| 3900|
+---------+-----+------+
only showing top 2 rows
val byDepName = Window.partitionBy('depName')
empsalary.withColumn("avg", sum("salary").over(byDepName)/ (when(sum("empNo").over(byDepName) ===0,1)).otherwise(sum("empNo").over(byDepName))).show
+---------+-----+------+-----------------+
| depName|empNo|salary| avg|
+---------+-----+------+-----------------+
| develop| 7| 4200|557.7777777777778|
| develop| 8| 6000|557.7777777777778|
| develop| 9| 4500|557.7777777777778|
| develop| 10| 5200|557.7777777777778|
| develop| 11| 5200|557.7777777777778|
| sales| 1| 5000| 1825.0|
| sales| 3| 4800| 1825.0|
| sales| 4| 4800| 1825.0|
|personnel| 0| 3500| 3500.0|
+---------+-----+------+-----------------+
Спасибо, Jayadeep