0

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?

Antwort

0

Angenommen, ich habe Ihre Frage richtig gelesen, haben Sie eine RDD, wobei jede Zeile eine Liste von Tupeln ist und einige Zeilen bis zu 600K Tupel haben können.

Ohne Ihre Cluster-Konfigurationen zu kennen oder den tatsächlichen Code zu betrachten, kann ich nur spekulieren. Meine beste Vermutung ist, dass seit Spark nur Partitionen nach Zeilen, Zeilen mit einer großen Anzahl von Spalten ihre Spalten nicht auf Partitionen verteilt werden können, was zu Fehlern im Arbeitsspeicher führt.

Wenn dies der Fall ist, müssen Sie möglicherweise die Clusterkapazität erhöhen oder die Daten so umstrukturieren, dass jedes Tupel in einer eigenen Zeile ist.

+0

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. –

+0

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. –

+1

Ich beendete die Struktur und es funktionierte. –