Фрейм данных имеет только один столбец «возраст» и содержит 140 миллионов строк. Например, df.agg(sum("age")) и df.rdd.map(x=>x(0).toString.toFloat).sum получают разные значения. Между ними почти в три раза больше разницы.
df.agg(sum("age"))
df.rdd.map(x=>x(0).toString.toFloat).sum
Это потому, что эффективных чисел типа float недостаточно, поэтому сумма в итоге меньше, чем фактический результат. Когда array.map(_.toDouble).sum, результат правильный.
array.map(_.toDouble).sum