在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  Java  Scala/ Spark 中 關(guān)于scala 語法理解的問題

Spark 中 關(guān)于scala 語法理解的問題


    val lines: Dataset[String] = session.read.textFile("")
    val words: Dataset[String] = lines.flatMap(_.split(" "))
    
    上面lines是一個dataSet對象,flatMap方法是dataSet中定義的一個方法,上面兩行代碼在IDEA下沒報錯誤。flatMap如下:
    
    
      def flatMap[U : Encoder](func: T => TraversableOnce[U]): Dataset[U] =
    mapPartitions(_.flatMap(func))
    
    
   
    

問題:
_.split(" ") 相當(dāng)于一個函數(shù),傳入?yún)?shù)是String類型,返回類型是split的結(jié)果類型 Array[String],

而flatmap方法定義為接收 func: T => TraversableOnce[U] , 顯然這里的T是String類型,
而 Array[String] 并不是TraversableOnce[U] 類型,因為Array 沒有實現(xiàn)TraversableOnce 這個特質(zhì),

所以我的問題是: 為什么 我傳入 _.split(" ") 這樣一個函數(shù) 給flatMap,flatMap卻沒有報錯??

簡而言之就是我傳入的方法 類型,和flatMap 需要的方法類型 好像是不匹配的,不是嗎?

回答
編輯回答
嫑吢丕

flatMap需要一個實現(xiàn)了一交遍歷接口的類型或返回這個類型的函數(shù),_.split("")返回的是list, list也實現(xiàn)了TraversableOnce,所以類型是匹配的。

final def flatMap[B](f: (A) ? GenTraversableOnce[B]): List[B]
2017年11月30日 20:28