Ich versuche, einen Spark-Job zu schreiben, der eine Zeitreihe auf eine Vielzahl von Arten analysiert. Durch eine Reihe von Transformationen, nehme ich einen Datenrahmen und RDDs fallen lassen, so dass ich Zeilen strukturiert wie:Spark Job Wrapping einer Transformation mit lokalen Operationen (sehr langsam und OOM-Probleme)
Row[((tuple, key) t1, t2, t3, t4, t5, ...)]
ist dieses rdd Lassen Sie rufen: rdd
.
Ich rufe rdd.flatMap(foo(r[1:]))
, und ich erwartete foo
zu nehmen, wie es eine Liste von Zeiten eingegeben wird, und eine Liste von Analysen zu liefern, wie es ausgegeben wird.
die
def foo(times):
return [average(times), percentile(times, 25)]
sagen lassen, wenn ich diesen Job ausführen, es dauert ewig, und ich bekomme OOM
Fehler, die alles zum Scheitern führen. times
sollte nicht mehr als 600K
Artikel haben, und das ist der Super-Ausreißer Fall. Die meisten hätten wahrscheinlich zwischen 10K
- 100K
.
Ich kann reduceByKey()
nicht verwenden, da die Operationen, die ich ausführen muss, erfordern, die gesamte Zeitreihe zu betrachten und mehrmals hin und her zu gehen.
Hat jemand irgendwelche Empfehlungen auf eine Weise, dieses Langsamkeitsproblem OOM
zu lösen?
Sorry, wenn ich unklar war. Eine Zeile, die aussieht wie "Row [(tuple, key) t1, t2, t3, ...]" kann '600K'' t's haben, was '600K' Elemente bedeutet, die im Tupelwert des' key, value gespeichert sind 'Paar. –
Also Zeilen haben ein Tupel als Schlüssel, und dann ist der Wert eine Liste von bis zu 600K Elemente? Ich denke mein Punkt über zu viele Spalten steht noch. –
Ich beendete die Struktur und es funktionierte. –