了解Scala中Spark中的函数文档

时间:2015-06-05 07:14:23

标签: scala apache-spark

我是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等......)。如果有人能够解释本文档的每个部分究竟传达了什么,将不胜感激

2 个答案:

答案 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,依此类推。