2015-06-05 35 views
1

我是Scala &的新手,試圖瞭解Spark中Scala的Function Documentation。在「flatMap」功能有這樣在scala中瞭解Spark中的函數文檔

def 
flatMap[U](f: (T) ⇒ TraversableOnce[U])(implicit arg0: ClassTag[U]): RDD[U] 
Return a new RDD by first applying a function to all elements of this RDD, and then flattening the results. 

文檔雖然我知道究竟flatMap呢,理解文件似乎過於隱祕(與像U,F,T等..字母)。希望如果有人能解釋究竟這個文檔的各個部分傳達

回答

1
  • def flatMap:這是一個叫做flatMap方法。
  • [U]:它是通用的,帶有一個類型參數U
  • (f: (T) ⇒ TraversableOnce[U]):它需要T ⇒ TraversableOnce[U]類型的一個參數,f,(TRDD本身的一般參數,所以例如,如果你有一個RDD[String]然後T = String)。所以f是一個單參數函數,它需要一個T並返回一個TraversableOnce[U]。請記住U是該方法的類型參數(通用)。因此,您可以使用需要T並返回TraversableOnce[Something]的任何函數調用此方法。
  • (implicit arg0: ClassTag[U]):該方法需要類型ClassTag[U]的隱式參數可用。像這樣的含義通常會限制一個類型參數的類型。在這種情況下,ClassTag意味着類型U需要在編譯時提供具體的類型信息。在實踐中,您可以忽略這一點,除非您嘗試使用您自己的通用方法調用flatMap
  • : RDD[U]:該方法返回RDD[U]。記住U是該方法的類型參數。因此,如果您撥打flatMap,而f返回TraversableOnce[Int],則返回類型將爲RDD[Int];如果您撥打flatMap,並且返回TraversableOnce[Potato]f返回類型將爲RDD[Potato],依此類推。
1
def flatMap[U](f: (T) ⇒ TraversableOnce[U])(implicit arg0: ClassTag[U]): RDD[U] 

嘗試用PersonUPet更換T

flatMap以函數f作爲參數。該函數以Person類型的實例作爲參數,並返回一個Pet s的集合 - 即該人的寵物。然後flatMap將返回單個集合Pet,即,RDD[Pet]

def flatMap[Pet](f: (Person) ⇒ TraversableOnce[Pet])(implicit arg0: ClassTag[Pet]): RDD[Pet] 

//usage . 
val allPets = people.flatMap(person => person.pets) 

第二個參數列表上的隱含ClassTag是不同的故事。這用於讓編譯器爲Pet類型創建清單,以便flatMap可以反映該類型。

瞭解更多關於在這裏:​​TypeTags and Manifests