簡體   English   中英

Apache-Spark:map(_._ 2)的簡寫是什么?

[英]Apache-Spark : What is map(_._2) shorthand for?

我讀了一個項目的源代碼,發現:

val sampleMBR = inputMBR.map(_._2).sample

inputMBR是一個元組。

功能map的定義是:

map[U classTag](f:T=>U):RDD[U]

似乎map(_._2)map(x => (x._2))的縮寫map(x => (x._2))

誰能告訴我這些速記的規則?

_語法可能有點令人困惑。 當_本身使用時,它表示匿名函數中的參數。 因此,如果我們處理對: map(_._2 + _._2)將是map(x, y => x._2 + y._2)縮寫map(x, y => x._2 + y._2) 當_用作函數名稱(或值名稱)的一部分時,它沒有特殊含義。 在這種情況下, x._2返回元組的第二個元素(假設x是元組)。

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)

' _._2 '中的兩個下划線是不同的。

第一個' _ '用於匿名函數的占位符 ; 第二個' _2 '是案例類Tuple 成員

就像是:

case class Tuple3( _1 :T1, _2 :T2, _3 :T3){...}

我找到了解決方案。

首先,這里的underscore占位符

要使函數文字更簡潔,可以使用下划線作為一個或多個參數的占位符,只要每個參數在函數文字中只出現一次。

有關Scala underscore更多信息,請參閱Scala中underscore 的所有用途?

第一個'_'指的是映射到的內容,因為映射到的是一個元組,你可以調用元組中的任何函數,其中一個方法是'_2',所以下面告訴我們將輸入轉換為它的第二個屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM