2016-07-21 30 views
-1

您好我是apache spark和scala的新手。我正在嘗試將 Array(('a',1), ('b',(1,1)), ('c',1))轉換爲Array(('a',1), ('b',2), ('c',1))減少鍵,列表(值)鍵,使用scala的值

請幫助我轉換。

+3

你也許意味着'陣列((A,表(1)),(B,列表(1,1)),(C,一覽(1) ))'?如果不是,你輸入的類型應該是什麼? – Alec

+0

並沒有什麼Spark - 所有數組(也許列表)。請更清楚。 –

+1

'(b,(2))'是什麼意思? '(b,2)'不會更好嗎? – jwvh

回答

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在元組中的元素。我們還需要將每個值映射到一個整數,以便計算總和。

也有看看這個問題:Iterate Over a tuple