如何在scala中提取列表中的元组

时间:2018-03-18 21:01:26

标签: scala list apache-spark tuples

我的RDD如下:

scala> topWithKeysSorted.take(10).foreach(println)
(1,[Lscala.Tuple4;@3e0c2650)
(2,[Lscala.Tuple4;@fef700c)
(3,[Lscala.Tuple4;@1ecb9068)
(4,[Lscala.Tuple4;@35b53a35)
(5,[Lscala.Tuple4;@6ad4a475)
(6,[Lscala.Tuple4;@1e4fd633)
(7,[Lscala.Tuple4;@5c455d42)
(8,[Lscala.Tuple4;@40bdb06d)
(9,[Lscala.Tuple4;@f854303)
(10,[Lscala.Tuple4;@6f9be28e)

scala> topWithKeysSorted.first
res38: (Int, Array[(Int, Int, String, Float)]) = (1,Array((1,2,Quest Q64 10 FT. x 10 FT. Slant Leg Instant U,59.98)))

如何将其转换为(Int, Int, Int, String, Float)?我认为应该有一些简单而简单的方法,我不知道。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用pattern matching轻松处理输入元组的各个部分:

val input = (1, Array((1, 2, "Quest Q64 10 FT. x 10 FT. Slant Leg Instant U", 59.98)))
input match { case (k, Array((v1, v2, v3, v4))) => (k, v1, v2, v3, v4) }

返回:

(1,1,2,Quest Q64 10 FT. x 10 FT. Slant Leg Instant U,59.98)

如果您想对RDD的每个元素应用此转换:

topWithKeysSorted.map{
  case (k, Array((v1, v2, v3, v4))) => (k, v1, v2, v3, v4) 
}