【问题标题】:Scala - Use of .indexOf() and .indexWhere()Scala - .indexOf() 和 .indexWhere() 的使用
【发布时间】:2017-04-11 05:51:23
【问题描述】:

我有一个像下面这样的元组:

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

我想获取第一个元素在列表中的位置大于它们的值的位置。为此,我尝试使用 .indexOf() 和 .indexWhere() 但我可能找不到完全正确的语法,所以我不断得到:

value indexWhere 不是 org.apache.spark.rdd.RDD[(String, 可迭代[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

【问题讨论】:

  • 您粘贴的代码与您描述的错误无关:该错误意味着您试图在没有这种方法的org.apache.spark.rdd.RDD 上调用indexWhereRDD分布式 集合的抽象,它不是 Scala 集合库的一部分,所以不要期望每个集合库方法都属于它。跨度>
  • 我能以某种方式克服这个问题吗?

标签: scala apache-spark indexof


【解决方案1】:

如果您想为 RDD 中的每个元素执行此操作,您可以使用 RDD 的 mapValues(它只会映射元组的右侧)并传递一个函数使用indexWhere:

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

注意事项:

  • 您的示例似乎错误,如果您想要 last 匹配项,它应该是 5(位置 2)而不是 4
  • 您没有定义当没有项目符合您的条件时应该做什么,例如对于List(0,0,0) - 在这种情况下,结果将为 0 但不确定这是否是您所需要的

【讨论】:

  • 感谢您的帮助! :)关于你是对的例子..我的意思是条件成立的第一个位置!
  • 如果这回答了您的问题 - 请接受答案;如果不是 - 请说明如何。否则 - 其他用户将无法帮助您或知道您是否需要它。
猜你喜欢
  • 2019-12-21
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-22
  • 2013-01-23
  • 1970-01-01
相关资源
最近更新 更多