1

いくつかのフィルター条件を追加して、小さな RDD で 1 つの BIG RDD を反復したいと考えています。以下のコードは正常に動作していますが、プロセスはドライバーでのみ実行され、ノード全体に分散されていません。他のアプローチを提案してください。

val cross = titlesRDD.cartesian(brRDD).cache()
 val matching = cross.filter{ case( x, br) => 
    ((br._1 == "0") && 
   (((br._2 ==((x._4))) &&
    ((br._3 exists (x._5)) || ((br._3).head=="")) 
}

ありがとう、マドゥ

4

1 に答える 1

3

おそらくキャッシュしたくないでしょうcross。キャッシュしないと、メモリ内のデカルト積から生じる可能性のある多数の組み合わせをインスタンス化する代わりに、フィルターの必要に応じてデカルト積が「オンザフライ」で発生するようになると思います。

また、たとえばbrRDD.filter(_._1 == "0")、デカルト積を行う前に行うことができますtitlesRDD

val cross = titlesRDD.cartesian(brRRD.filter(_._1 == "0"))

次に、作成に使用したフィルターをmatching適切に変更します。

于 2015-09-27T20:52:49.720 に答える