web-dev-qa-db-ja.com

グロムとは? mapPartitionsとどう違うのですか?

RDDでglom()メソッドに出くわしました。ドキュメントによると

各パーティション内のすべての要素を配列に結合して作成されたRDDを返します

glomはパーティション間でデータをシャッフルしますか、それともパーティションデータを配列として返すだけですか?後者の場合、mapPartitionsを使用しても同じことが達成できると思います。

また、glomの恩恵を受けるユースケースがあるかどうかも知りたいです。

11
nagendra

glomはパーティション間でデータをシャッフルしますか

いいえ、しません

これが2番目のケースである場合、mapPartitionsを使用して同じことが達成できると思います

できる:

rdd.mapPartitions(iter => Iterator(_.toArray))

ただし、mapflatMapfilterなどのシャッフル以外の変換にも同じことが当てはまります。

globの恩恵を受けるユースケースがある場合。

複数回トラバース可能な形式でパーティションデータにアクセスする必要がある状況。

11
zero323

glom()は、各パーティションを要素のタプル(不変リスト)に変換します。タプルのRDDを作成します。パーティションごとに1つのタプル。

6
kriti arora

"... Glom()一般に、sparkは、ワーカーがRDDの特定の要素を参照することを許可しません。言語をクリーンに保ちますが、大きな制限になる可能性があります。glom()各パーティションを要素のタプル(不変リスト)に変換します。チュールのRDDを作成します。パーティションごとに1つのタプル。ワーカーはインデックスによってパーティションの要素を参照できます。ただし、要素に値を割り当てることはできません。 RDDはまだ不変です。これで、各パーティションの要素数をカウントするために上記で使用したコマンドを理解できます。glom()を使用して各パーティションをタプルにします。lenを使用します。タプルの長さを取得するための各パーティション-パーティションのサイズ。*結果をcollectして出力します。