我是Scala&的新手试图了解Spark中的Scala Function Documentation。 'flatMap'函数有这样的文档
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等......)。如果有人能够解释本文档的每个部分究竟传达了什么,将不胜感激
答案 0 :(得分:1)
def flatMap[U](f: (T) ⇒ TraversableOnce[U])(implicit arg0: ClassTag[U]): RDD[U]
尝试将T
替换为Person
,将U
替换为Pet
。
flatMap
将函数f
作为参数。此函数将类型Person
的实例作为参数,并返回Pet
s的集合 - 即该人的宠物。然后,flatMap
将返回Pet
s的单个集合,即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
答案 1 :(得分:1)
def flatMap
:这是一个名为flatMap的方法。[U]
:它是通用的,有一个类型参数U
。(f: (T) ⇒ TraversableOnce[U])
:f
类型需要一个T ⇒ TraversableOnce[U]
T
RDD
本身的通用参数,所以例如,如果你有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
的{{1}}来致电f
,则返回类型将为TraversableOnce[Int]
;如果您使用返回RDD[Int]
的{{1}}来致电flatMap
,则返回类型将为f
,依此类推。