web-dev-qa-db-ja.com

Spark:FlatMapValuesクエリ

ラーニングSpark本を読んでいて、次のペアのrdd変換を理解できませんでした。

_rdd.flatMapValues(x => (x to 5))
_

これはrdd {(1,2),(3,4),(3,6)}に適用され、変換の出力は{(1,2),(1,3),(1,4),(1,5),(3,4),(3,5)}です。

誰かがこれを説明できますか?.

10
Vinay

flatMapValuesメソッドは、flatMapmapValuesを組み合わせたものです。

与えられたrddから始めましょう。

_val sampleRDD = sc.parallelize(Array((1,2),(3,4),(3,6)))
_

mapValuesは、キーを保持しながら値をマッピングします。

たとえば、sampleRDD.mapValues(x => x to 5)

_Array((1,Range(2, 3, 4, 5)), (3,Range(4, 5)), (3,Range()))
_

キーと値のペア_(3, 6)_の場合、_(3,Range())_は空の値のコレクションを生成するため、これは_6 to 5_を生成することに注意してください。


flatMapコレクションをコレクションの要素に「分解」します。 here および here のように、flatMapのより正確な説明をオンラインで検索できます。

例えば、

val rdd2 = sampleRDD.mapValues(x => x to 5)を指定すると、rdd2.flatMap(x => x)を実行すると、

_Array((1,2),(1,3),(1,4),(1,5),(3,4),(3,5)).
_

つまり、各キーのコレクション内のすべての要素に対して、_(key, element)_ペアを作成します。

また、シーケンスが空であるため、_(3, Range())_は追加のキー要素ペアを生成しないことに注意してください。

flatMapmapValuesを組み合わせると、flatMapValuesになります。

32
jtitusj

flatMapValuesは、キーに関連付けられた各値で機能します。上記の場合、_x to 5_は、各値が5まで増分されることを意味します。

_(1,2)_がある最初のペアを取得すると、ここでキーは1で値は2になるため、変換を適用すると{(1,2),(1,3),(1,4),(1,5)}になります。

お役に立てれば。

5
Shashi