嗨,我是apache spark和scala的新手。我想转换
Array(('a',1), ('b',(1,1)), ('c',1))
至Array(('a',1), ('b',2), ('c',1))
请你帮我转换。
答案 0 :(得分:2)
在问题中没有具体类型的情况下,我假设数组中的值分别是Char和Int元组。以下是我们如何转换为所需的输出:
scala> val a = Array(('a',1), ('b',(1,1)), ('c',1))
a: Array[(Char, Any)] = Array((a,1), (b,(1,1)), (c,1))
scala> a map { case (first, second) => (first, second match { case p: Product => Tuple1(p.productIterator.map(_.asInstanceOf[Int]).reduce(_ + _)); case _=> second }) }
res27: Array[(Char, Any)] = Array((a,1), (b,(2,)), (c,1))
基本上我们可以使用productIterator遍历元组中的元素。我们还需要将每个值映射到一个Integer,以便计算总和。
另请查看此问题:Iterate Over a tuple