可以将映射函数应用于元组吗?

时间:2014-04-30 20:19:38

标签: scala apache-spark

我有一个类型的元组:

val data1 : (String , scala.collection.mutable.ArrayBuffer[(String , Int)]) = ( ("" , scala.collection.mutable.ArrayBuffer( ("a" , 1) , ("b" , 1) , ("a" , 1) ) ))  // , ("" , scala.collection.mutable.ArrayBuffer("" , 1)) )

当我尝试使用data1.map(m => println(m))进行地图时,我收到错误:

Multiple markers at this line - value map is not a member of (String, scala.collection.mutable.ArrayBuffer[(String, 
 Int)]) - value map is not a member of (String, scala.collection.mutable.ArrayBuffer[(String, Int)])

是否可以使用Tuple访问器语法使用map函数:._2?

这种语法data1.map(m._2 => println(m._2)))无法编译

使用这种语法我试图应用一个map函数来汇总与ArrayBuffer相关的所有字母。所以上面的例子应该映射到 - > ((a,2),(b,1))

3 个答案:

答案 0 :(得分:2)

目前还不清楚你想要什么。你期待什么输出?

是否要打印data1的第二项?

println(data1._2)

或者在data1

中打印buff的每个项目
data1._2.foreach(m => println(m))

你想让data1成为元组的集合并映射吗?

import scala.collection.mutable.ArrayBuffer
val data1 = Vector(("" , ArrayBuffer(("", 1))), ("", ArrayBuffer("", 1)))
data1.foreach { case (a,b) => println(b) }

请注意,如果您只是打印出来的内容,则需要foreach,而不是map



根据您的修改:

import scala.collection.mutable.ArrayBuffer
val data1 = (("", ArrayBuffer(("a", 1), ("b", 1), ("a", 1))))
val grouped = data1._2.groupBy(_._1).map { case (k, vs) => (k, vs.map(_._2).sum) }
// Map(b -> 1, a -> 2)

答案 1 :(得分:0)

您无法在元组上使用地图。元组没有这种方法。

map函数也应该转换值并返回它,但你只想打印它,而不是改变它。

要在您的案例中打印ArrayBuffer,请尝试:

data1._2.foreach(x=>println(x))

或只是

data1._2.foreach(println)

答案 2 :(得分:-1)

尝试

data1.foreach( { case ( x, y ) => println( y ) } )