Source: http://www.metz.supelec.fr/metz/personnel/vialle/course/BigData-2A-CS/poly-pdf/Poly-chap1.pdf