Разница между reduce и foldLeft / fold в функциональном программировании (особенно в Scala и Scala API)?

Почему в Scala и таких фреймворках, как Spark и Scalding, есть и reduceи foldLeft? Так в чем же разница между reduceи fold?