Académique Documents
Professionnel Documents
Culture Documents
Installation de l'environnement
# récupérer le docker
git clone https://github.com/kibatic/docker-single-node-hadoop.git
cd docker-single-node-hadoop
docker-compose build
docker-compose up -d
RSI31 Page 1
Atelier Big Data avancée 20/21
Opérations usuelles
Créer un RDD à la main
Antonio Machado
// prend les 5 premières lignes du RDD et les affiches les unes sous les autres
lines.take(5).foreach(println)
RSI31 Page 2
Atelier Big Data avancée 20/21
/* retour :
lines: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[15] at textFile at <console>:25
res22: Long = 12
res25: String = Marcheur, ce sont tes traces
Marcheur, ce sont tes traces
ce chemin, et rien de plus ;
Marcheur, il n'y a pas de chemin,
Le chemin se construit en marchant.
En marchant se construit le chemin,
*/
/** @returns
lines: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[19] at textFile at <console>:23
cheminLines: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[20] at filter at <console>:25
res28: Long = 12
res29: Long = 5
*/
cheminLines.count()
cheminLines.first()
RSI31 Page 3
Atelier Big Data avancée 20/21
/* returns
res83: Long = 8
res84: String = ce chemin, et rien de plus ;
res85: Long = 5
res86: Long = 3
*/
/* résultat
res128: Array[Int] = Array(2, 4, 6, 8)
2,4,6,8
*/
flatMap
/* renvoie :
res131: Array[String] = Array(hello, world, bonjour, le, monde)
*/
RSI31 Page 4
Atelier Big Data avancée 20/21
// cartesian product
val letters = sc.parallelize(List("A", "B", "C"))
var digits = sc.parallelize(List(1, 2))
var rdd = letters.cartesian(digits)
rdd.collect()
// returns Array[(String, Int)] = Array((A,1), (A,2), (B,1), (B,2), (C,1), (C,2))
Extraction de sous-ensembles
sample permet de récupérer un sous ensemble
val sample = rdd.extract(withReplacement, fraction, [seed])
6
12
*/
// réduction simple
val input = sc.parallelize(List(1, 2, 3, 4))
input.reduce((x,y) => x+y)
// renvoie 10
// fold : idem réduction mais avec une "zero value" qui est l'identité de votre opération
val input = sc.parallelize(List(1, 2, 3, 4))
input.fold(0)((x,y) => x+y)
// renvoie 10 aussi
RSI31 Page 5
Atelier Big Data avancée 20/21
input.take(3) // 3 elements
input.top(4) // 4 top elements
input.takeOrdered(5)(ordering) // 5 élément ordonnées suivant la fonction fournie
input.takeSample(false, 12) // 12 éléments au pif
input.foreach(func) // applique la func aux élements du RDD
// aggrégation
input.aggregate(zeroValue)(seqOp, combOp)
input.mean() // moyenne
import org.apache.spark.storage.StorageLevel
val input = sc.parallelize(List(1, 2, 3, 4))
val result = input.map(x => x + x)
result.persist(StorageLevel.DISK_ONLY)
println(result.count())
println(result.collect().mkString(","))
/*
5 types de persistance. Avec SER, c'est avec sérialisation. Ca prend plus de CPU et moins de place.
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
*/
RSI31 Page 6