10

Learning 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)}

誰かがこれを説明してもらえますか。

4

2 に答える 2

36

flatMapValuesmethod は と の組み合わせflatMapですmapValues

与えられた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コレクションをコレクションの要素に「分解」します。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です。

于 2016-05-18T14:49:58.107 に答える
5

flatMapValues は、キーに関連付けられた各値に対して機能します。上記の場合x to 5、各値が 5 までインクリメントされることを意味します。

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

お役に立てれば。

于 2016-05-18T14:42:30.017 に答える