che*_*gpu 10 scala apache-spark
我读了一个项目的源代码,发现:
val sampleMBR = inputMBR.map(_._2).sample
Run Code Online (Sandbox Code Playgroud)
inputMBR 是一个元组.
该函数map的定义是:
map[U classTag](f:T=>U):RDD[U]
Run Code Online (Sandbox Code Playgroud)
这似乎map(_._2)是速记map(x => (x._2)).
谁能告诉我那些速记的规则?
Hol*_*den 16
_语法可能有点令人困惑.当_本身使用时,它表示匿名函数中的参数.因此,如果我们在成对上工作:
map(_._2 + _._2)将是简写map(x, y => x._2 + y._2).当_用作函数名称(或值名称)的一部分时,它没有特殊含义.在这种情况下,x._2返回元组的第二个元素(假设x是元组).
mar*_*nfo 13
collection.map(_._ 2)发出元组的第二个组件.来自纯Scala的示例(Spark RDD以相同的方式工作):
scala> val zipped = (1 to 10).zip('a' to 'j')
zipped: scala.collection.immutable.IndexedSeq[(Int, Char)] = Vector((1,a), (2,b), (3,c), (4,d), (5,e), (6,f), (7,g), (8,h), (9,i), (10,j))
scala> val justLetters = zipped.map(_._2)
justLetters: scala.collection.immutable.IndexedSeq[Char] = Vector(a, b, c, d, e, f, g, h, i, j)
Run Code Online (Sandbox Code Playgroud)
" _._2'中的两个下划线是不同的.
First' _' 代表匿名函数的占位符 ; 第二个' _2'是案例类的成员Tuple.
就像是:
case class Tuple3(_1:T1,_2:T2,_3:T3){...}