[解決済み】mapとflatMapの違いと、それぞれの良い使用例について教えてください。
2022-03-31 19:59:13
質問
mapとflatMapの違いと、それぞれの良い使用例について、どなたか教えてください。
結果を平坦にする」とはどういう意味ですか? また、どのような場合に有効なのでしょうか?
どのように解決するのですか?
以下は、その違いの例です。
spark-shell
セッションになります。
まず、いくつかのデータ、つまり2行のテキストです。
val rdd = sc.parallelize(Seq("Roses are red", "Violets are blue")) // lines
rdd.collect
res0: Array[String] = Array("Roses are red", "Violets are blue")
今すぐ
map
は、長さNのRDDを長さNの別のRDDに変換する。
例えば、2行から2行の長さに写像する。
rdd.map(_.length).collect
res1: Array[Int] = Array(13, 16)
しかし
flatMap
(大雑把に言うと)長さNのRDDをN個のコレクションのコレクションに変換し、これらを結果の単一のRDDに平坦化します。
rdd.flatMap(_.split(" ")).collect
res2: Array[String] = Array("Roses", "are", "red", "Violets", "are", "blue")
1行に複数の単語があり、複数の行がありますが、最終的には単語の配列が1つ出力されます
それを説明するために、行のコレクションから単語のコレクションにflatMappingすると、次のようになります。
["aa bb cc", "", "dd"] => [["aa","bb","cc"],[],["dd"]] => ["aa","bb","cc","dd"]
したがって、入力と出力のRDDは、通常、異なるサイズの
flatMap
.
を使おうとした場合
map
と一緒に
split
関数を使うと、ネストした構造体(単語の配列のRDDで、型は
RDD[Array[String]]
というのも、1つの入力に対して正確に1つの結果を得なければならないからです。
rdd.map(_.split(" ")).collect
res3: Array[Array[String]] = Array(
Array(Roses, are, red),
Array(Violets, are, blue)
)
最後に、便利な特殊ケースとして、答えを返さないかもしれない関数とのマッピングがあります。
Option
. を使用することができます。
flatMap
を返す要素をフィルタリングするために
None
を返すものから値を抽出し
Some
:
val rdd = sc.parallelize(Seq(1,2,3,4))
def myfn(x: Int): Option[Int] = if (x <= 2) Some(x * 10) else None
rdd.flatMap(myfn).collect
res3: Array[Int] = Array(10,20)
(ここで、Optionはむしろ1つの要素か0つの要素を持つリストのように振る舞うことに注意してください)
関連
-
[解決済み】spark.driver.maxResultSizeとは何ですか?
-
[解決済み] spark.sql.autoBroadcastJoinThresholdは、Datasetの結合演算子を使用して結合するために動作しますか?
-
[解決済み] PySparkのデータフレームで、各キーのパーセンタイルはどのように計算されますか?
-
[解決済み] Spark が "java.net.URISyntaxException" を報告するのはなぜですか?DataFrameを使用する際に「java.net.URIStyntaxException: Relative path in absolute URI」と表示されるのはなぜですか?
-
[解決済み] spark 2.4.4 をインストールした後に pyspark を実行しようとすると、「TypeError: an integer is required (got type bytes)」というエラーが発生するのを修正する方法
-
[解決済み] sparkでsaveAsTextFileするときのファイル名の付け方は?
-
[解決済み] Sparkのバージョンを確認する方法【終了しました
-
[解決済み] spark checkpointとpersist to a diskの違いは何ですか?
-
[解決済み】SparkのDataFrame、Dataset、RDDの違いについて
-
[解決済み] 複数のテキストファイルを1つのRDDに読み込むには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] spark.sql.autoBroadcastJoinThresholdは、Datasetの結合演算子を使用して結合するために動作しますか?
-
[解決済み] スパーク "プランの文字列表現が大きすぎたため、切り捨てました。" 手動で作成した集計式を使用した場合の警告
-
[解決済み] spark 2.4.4 をインストールした後に pyspark を実行しようとすると、「TypeError: an integer is required (got type bytes)」というエラーが発生するのを修正する方法
-
[解決済み] Sparkクラスタがハートビートのタイムアウトでいっぱいになり、エグゼキュータが勝手に終了してしまう。
-
[解決済み] spark.yarn.executor.memoryOverhead "の設定値?
-
[解決済み] 実行中のSparkアプリケーションを終了させるには?
-
[解決済み] TypeError: 'Column' オブジェクトは WithColumn を使用して呼び出すことができません。
-
[解決済み] Java 8のmap()メソッドとflatMap()メソッドの違いは何ですか?
-
[解決済み】mapとflatMapの違いと、それぞれの良い使用例について教えてください。
-
[解決済み】SparkコンソールにINFOメッセージを表示させないようにするには?