2017-01-17 6 views
0

mapPartitions()に部分的な結果を返す方法はありますか?パーティションがresults配列がOOM例外がスローされます大きすぎる場合mapPartitions(Spark)の結果を合理化

myRDD.mapPartitions{ 
    iter: iterator[InputType] => { 
    val additionalData = <some costly init operation> 
    val results = ArrayBuffer[OutputType]() 
    for(input: InputType <- iter) results += (transform(input, additionalData)) 
    results.iterator 
    } 
} 

しかし、もちろん:

は現在、私はこのようにそれを使用しています。

私の質問:どのようなOOMを避けるために、しばらくのうちに部分的な結果を送信する方法はありますか?

は私が高価なオブジェクトを初期化するための入力を処理する前に(例えば、大きな放送型変数の値を取得する)mapPartitionsに固執したいと私はとのようにすべてのレコードでそれを行うにはしたくないmap

答えて

1

additionalDataがイテレータにアクセスしない場合は、map

myRDD.mapPartitions{ 
    iter: iterator[InputType] => { 
    val additionalData = ??? 
    iter.map(input => transform(input, additionalData)) 
}} 
関連する問題