2015-06-05 36 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