2015-06-05 3 views
1

Я новичок в Scala &, пытаясь понять Function Documentation для Scala in Spark. функция «flatMap» есть документация, как этотПонимание функциональной документации в Spark in scala

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 делает, понимание документации кажется слишком Cryptic (с буквой, как U, F, T и т.д. ...). Был бы признателен, если кто-то может объяснить, что именно каждая часть этой документации передает

ответ

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 является параметром типа (generic) для метода. Таким образом, вы можете вызвать этот метод с любой функцией, которая принимает T и возвращает TraversableOnce[Something].
  • (implicit arg0: ClassTag[U]): метод требует наличия неявного параметра типа ClassTag[U]. Подобные ошибки часто ограничивают типы типов. В этом случае ClassTag означает, что тип U должен иметь информацию о конкретном типе, доступную во время компиляции. На практике вы можете игнорировать это, если не пытаетесь вызвать flatMap из собственного собственного метода.
  • : RDD[U]: метод возвращает RDD[U]. Помните, что U был параметром типа в методе. Поэтому, если вы вызываете flatMap с f, который возвращает TraversableOnce[Int], тип возврата будет RDD[Int]; если вы позвоните flatMap с f, который возвращает TraversableOnce[Potato], тип возврата будет RDD[Potato] и так далее.
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

Смежные вопросы