访问列表

时间:2016-08-25 18:01:22

标签: scala apache-spark

我收到错误java.lang.IndexOutOfBoundsException: 5,但是我仔细检查了代码,根据我的理解,一切都是正确的。所以,我无法弄清楚如何解决这个问题。

我有RDD[(String,Map[String,List[Product with Serializable]])],例如:

(1566,Map(data1 -> List(List(1469785000, 111, 1, 3, null, 0),List(1469785022, 111, 1, 3, null, 1)), data2 -> List((4,88,1469775603,1,3370,f,537490800,661.09)))

我想创建一个新的RDD,它将汇总data1中子列表的第5个元素的值:

Map(id -> 1566, type -> List(0,1))

我写了以下代码:

  val newRDD = currentRDD.map({
    line => Map(("id",line._1),
                ("type",line._2.get("data1").get.map(_.productElement(5))
               )
      })

如果我放_.productElement(0),则结果为Map(id -> 1566, type -> List(1469785000,1469785022))。所以,我绝对误解为什么可以访问第0个字段,而第3个,第4个,第5个字段引起IndexOutOfBoundsException

1 个答案:

答案 0 :(得分:0)

问题是由于List[Product with Serializable],而我实际上是以List[List[Any]]处理的。我将初始RDD更改为RDD[(String,Map[String,List[List[Any]]])],现在一切正常。