0

私は様々な方法で時系列を分析するスパークジョブを作成しようとしています。 rddローカルオペレーションによる変換をラップするスパークジョブ

Row[((tuple, key) t1, t2, t3, t4, t5, ...)]

のは、このRDDを呼びましょう:私はように構成された行を持っているように、一連の変換を通して、私はデータフレームを取り、RDDSにドロップします。

私はと呼んでおり、fooは時間のリストを入力し、解析結果のリストを出力することを期待していました。

はそれが永遠にかかり、私はすべてが失敗する原因と OOMエラーを取得し、私はこの仕事を実行するとのは

def foo(times): 
    return [average(times), percentile(times, 25)] 

を言ってみましょう。 timesは、600K個以下のアイテムを持つ必要があります。これは超外れ値のケースです。ほとんどの場合、10K100Kの間になります。

実行する必要がある操作では、時系列全体を見て前後に何度も移動する必要があるため、reduceByKey()は使用できません。

誰もこのOOMの遅さの問題を解決する方法についての推奨事項はありますか?

答えて

0

質問を正しく読んだとします。各行がタプルのリストであり、いくつかの行が最大600,000のタプルを持つことができるRDDがあります。

クラスタ構成や実際のコードを確認することなく、推測することしかできません。私の推測では、Sparkは行単位でしかパーティション化されていないので、膨大な数の列を持つ行はパーティション間で列を分散できないため、メモリ不足エラーが発生します。

これが原因であれば、クラスタの容量を増やすか、各タプルがそれぞれの行になるようにデータを再構築する必要があります。

+0

私が不明な場合は申し訳ありません。 'Row [(tuple、key)t1、t2、t3、...]'のような1行は '600K' 't's 'を持つことができます。これは' 'キーのタプル値ペア。 –

+0

したがって、行はキーとしてタプルを持ち、値は最大600Kの要素のリストですか?あまりにも多くのコラムについての私の指摘はまだ立っていると思います。 –

+1

私は構造を調整し終え、それはうまくいった。 –

関連する問題