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)}
誰かがこれを説明してもらえますか。
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)}
誰かがこれを説明してもらえますか。
flatMapValues
method は と の組み合わせ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())
また、シーケンスが空であるため、追加のキー要素ペアが生成されないことにも注意してください。
今なら組み合わせflatMap
てmapValues
、お得flatMapValues
です。
flatMapValues は、キーに関連付けられた各値に対して機能します。上記の場合x to 5
、各値が 5 までインクリメントされることを意味します。
あなたが持っている最初のペアを取ると(1,2)
、ここではキーが1で値が2なので、変換を適用すると になり{(1,2),(1,3),(1,4),(1,5)}
ます。
お役に立てれば。