Vorteil ggü. MapReduce:
Workflow:
Erstellen von RDD:
fillde = sc.textFile(“…”, 4)
Spark optimiert die notwendigen Schritte
Beispiele:
rdd = sc.parallelize([1,2,3,4]) rdd.map(lambda x: x * 2); rdd.filter(lambda x: x % 2 == 0)
(Funktionen werden auf die Worker verteilt).
rdd.Map(lambda x: [x, x+5]) 1_6_2_7_3_8 rdd.flatMap(lambda x: [x, x+5]) [1,6,2,7,3,8]
Key-Value Transformationen rdd = sc.parallelize([(1,2), (3,4)])
Beispiel: rdd = sc.parallelize([(1,2), (3,4), (3,6)]) rdd.reduceByKey(lambda a, b: a + b) [(1,2), (3,4), (3,6)] → [(1,2), (3,10)]
rdd2 = sc.parallelize([(1,'a'), (2,'c'), (1,'b')]) rdd.groupByKey() [(1,'a'), (2,'c'), (1,'b')] → [(1,['a','b']), (2,'c')]
.cache() zum Cachen von Objekten.
1. RDDs erstellen 2. RDDs transformieren 3. Cachen 4. Actions ausführen
Broadcast Variables:
signPrefixes = sc.broadcast(…) signPrefixes.value
Accumulator:
accum = sc.accumulator(0) … def f(x):
global accum accum += x
…
accum.value