spark1.2里的一小段scala代码看不懂

 def map [ U :  ClassTag ] ( f : T => U): RDD[U] = {
    val cleanF = sc.clean(f)
    new MapPartitionsRDD [ U ,  T ] ( this ,  ( context ,  pid ,  iter )  => iter.map(cleanF))
  }

RDD.scala里的这个方法里的context, pid, iter不知道从哪来的啊??

https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/RDD.scala

显示有问题,请看http://bbs.csdn.net/topics/390991434

context, pid, iter是Lambda表达式的参数,这相当于一个函数。只是你定义了函数让对方反过来调用。
所以这些名字可以随便起。

你传递函数,对方调用你写的函数

你不是调用构造函数么,那就是那个对象

def map U : ClassTag : RDD[U] :定义的是一个方法,方法名是map,返回值是RDD,RDD是带范型参数的类,U为RDD中数据具体类型,
[ U : ClassTag ] 声明U,:是边界生命,类似于java中 ? extend Object
f : T => U声明map的参数名为f,f实际上是一个函数指针,函数入参为T类型,返回值为U类型

val cleanF = sc.clean(f) 应该是执行sparkContext的clean方法

new MapPartitionsRDD U , T => iter.map(cleanF)) 返回最终结果,
MapPartitionsRDD 应该需要两个参数构造,第一个参数为当前对象,第二个参数为入参味context,pid,iter,返回值为T类型的函数。
( context , pid , iter ) => iter.map(cleanF)定义了匿名函数,实际上就是闭包

匿名函数的定义不应该指定context ,pid的类型么