Scala使用foreach / for计算结果

时间:2015-11-18 18:26:54

标签: scala apache-spark

我写了以下

val suspects  =   
tenCalls.foreach{f=>IllegalOddsCalcs.getOddsForMsisdnScala(f._2.toList)}

或者可以是这个

  val suspects = for (f <- tenCalls) 
  (IllegalOddsCalcs.getOddsForMsisdnScala(f._2.toList))  

当我运行上述内容时,可疑列表始终为空,因为我没有使用yield。如何使用上面的产量来填充嫌疑人,或者我应该使用别的东西?

2 个答案:

答案 0 :(得分:3)

foreach有状态并返回Unit。您需要使用map代替。或者,您可以在yield

之后添加for
val suspects = tenCalls.map(f=>...)

OR

val suspects = for(f <- tenCalls) yield {...}

答案 1 :(得分:-1)

我猜@Justin是对的。 &#34; foreach&#34;范例的定义如下:

scala.collection.generic.FilterMonadic

它的返回类型是&#34; Unit&#34; (或者说,&#34; void&#34;)。在您的情况下,您应该使用map:

abstract def map[B, That](f: (A) ⇒ B)(implicit bf: CanBuildFrom[Repr, B, That]): That