spark中map與flatMap的區別


作為spark初學者對,一直對map與flatMap兩個函數比較難以理解,這幾天看了和寫了不少例子,終於把它們搞清楚了

兩者的區別主要在於action后得到的值

例子:

import org.apache.spark.{SparkConf, SparkContext}

object MapAndFlatMap {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(new SparkConf().setAppName("map_flatMap_demo").setMaster("local"))
    val arrayRDD =sc.parallelize(Array("a_b","c_d","e_f"))
    arrayRDD.foreach(println) //打印結果1

    arrayRDD.map(string=>{
      string.split("_")
    }).foreach(x=>{
      println(x.mkString(",")) //打印結果2
    })

    arrayRDD.flatMap(string=>{
      string.split("_")
    }).foreach(x=>{
      println(x.mkString(","))//打印結果3
    })
  }
}

上述代碼中,打印結果1、2、3分別如下面三圖

 

打印結果1

 

打印結果2

 

打印結果3

 

 

對比結果2與結果3,很容易得出結論:

map函數后,RDD的值為 Array(Array("a","b"),Array("c","d"),Array("e","f"))

flatMap函數處理后,RDD的值為 Array("a","b","c","d","e","f")

即最終可以認為,flatMap會將其返回的數組全部拆散,然后合成到一個數組中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM