2017-04-06 2 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

これがあなたの質問に答えるなら、答えを受け入れてください。そうでない場合は、どうすればいいのかを明確にしてください。そうしないと、他のユーザーがあなたを助けたり、必要があれば知ることができなくなります。 –

関連する問題