Différence entre réduire et foldLeft / fold dans la programmation fonctionnelle (en particulier les API Scala et Scala)?

Pourquoi Scala et des frameworks comme Spark et Scalding ont-ils à la fois reduceet foldLeft? Alors, quelle est la différence entre reduceet fold?