Scala apachespark:map(u.u 2)是什么的缩写?

Scala apachespark:map(u.u 2)是什么的缩写?,scala,apache-spark,Scala,Apache Spark,我阅读了一个项目的源代码,发现: val sampleMBR = inputMBR.map(_._2).sample inputMBR是一个元组 函数map的定义是: map[U classTag](f:T=>U):RDD[U] 似乎map(u._2)是map(x=>(x._2))的缩写 谁能告诉我这些速记的规则?语法可能有点混乱。当u单独使用时,它表示匿名函数中的一个参数。因此,如果我们研究配对: map(u2+2)是map(x,y=>x.2+y.2)的简写。当u用作函数名(或值名)

我阅读了一个项目的源代码,发现:

val sampleMBR = inputMBR.map(_._2).sample
inputMBR
是一个元组

函数
map
的定义是:

map[U classTag](f:T=>U):RDD[U]
似乎
map(u._2)
map(x=>(x._2))
的缩写


谁能告诉我这些速记的规则?

语法可能有点混乱。当u单独使用时,它表示匿名函数中的一个参数。因此,如果我们研究配对:
map(u2+2)
map(x,y=>x.2+y.2)
的简写。当u用作函数名(或值名)的一部分时,它没有特殊意义。在本例中,
x.\u 2
返回元组的第二个元素(假设x是元组)。

collection.map(\u.\u 2)发出元组的第二个组件。来自纯Scala的示例(Spark RDD的工作方式相同):


我找到了解决办法

首先,这里的
下划线作为占位符

为了使函数文字更加简洁,可以使用下划线 作为一个或多个参数的占位符,只要每个参数 在函数文本中仅显示一次


有关Scala中的
下划线
的详细信息,请参见。

在“
\uu 2
”中的两个下划线不同

第一个“
”表示匿名函数的占位符;第二个“
\u2
”是case类
元组的成员

比如:

案例类元组3(\u 1:T1,\u 2:T2,\u 3:T3) {…}


第一个“u”是指映射到的对象,因为映射到的对象是元组,所以可以调用元组中的任何函数,其中一个方法是“2”,下面告诉我们如何将输入转换为它的第二个属性

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)