2017-04-06 47 views
0

我有一個元組像下面這樣:斯卡拉 - 使用.indexOf()和.indexWhere()的

(Age, List(19,17,11,3,2)) 

,我想獲得的第一個元素的位置,它們在列表中的位置是大於它們的價值。要做到這一點,我試圖用.indexOf()和.indexWhere(),但我恐怕不能準確地找到正確的語法,所以我不斷收到:

值indexWhere不是org.apache的成員。 spark.rdd.RDD [(字符串, 可迭代[INT])

到目前爲止我的代碼是:

val test =("Age", List(19,17,11,3,2)) 
test.indexWhere(_.2(_)<=_.2(_).indexOf(_.2(_))) 

我還搜查了文檔在這裏沒有結果:http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.List

+2

您粘貼的代碼與您描述的錯誤不相關:錯誤意味着您正試圖調用indexWhere '在'org.apache.spark.rdd.RDD'上沒有這樣的方法。 'RDD'是_distributed_集合的抽象,它不屬於Scala的集合庫的一部分,所以不要指望每個集合庫方法都屬於它。 –

+0

我能以某種方式克服嗎? – lacrima

回答

2

如果你想在RDD執行此爲每一個元素,可以使用RDD的mapValues(這會只圖元組的右手邊),並通過使用indexWhere功能:

rdd.mapValues(_.zipWithIndex.indexWhere { case (v, i) => i+1 > v} + 1) 

注:

  • 你舉的例子似乎是錯誤的,如果你想最後匹配的項目應該是5(2位),而不是4
  • 你沒有定義什麼應該b當沒有項目符合你的條件時完成,例如爲List(0,0,0) - 在這種情況下,結果將爲0,但不知道這就是您需要的
+0

感謝您的幫助! :)關於你是對的例子..我的意思是條件成立的第一個位置! – lacrima

+0

如果這回答您的問題 - 請接受答案;如果沒有 - 請澄清如何如此。否則 - 其他用戶將無法幫助您或知道您是否需要它。 –