2016-08-25 3 views
0

Ich bekomme den Fehler java.lang.IndexOutOfBoundsException: 5, aber ich habe den Code überprüft und nach meinem Verständnis ist alles korrekt. Also kann ich nicht herausfinden, wie ich das Problem lösen kann.java.lang.IndexOutOfBoundsException, wenn eine Liste von Listen

Ich habe RDD[(String,Map[String,List[Product with Serializable]])], wie zum Beispiel:

(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))) 

ich ein neues RDD erstellen möchten, die die Werte der fünften Elemente der Unterlisten in data1 aggregiert:

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

ich das schrieb folgender code:

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

Wenn ichsetze, dann ist das Ergebnis Map(id -> 1566, type -> List(1469785000,1469785022)). Also, ich verstehe absolut nicht, warum auf das 0. Feld zugegriffen werden kann, während das 3., 4., 5. Feld IndexOutOfBoundsException provoziert.

+1

Faustregel: Verwenden Sie beim Lernen vollständige Anmerkungen, und Sie werden schnell die Lösung selbst finden. – sebszyller

+0

@sebszyller: Was meinst du? Meinst du, dass ich 'Produkt mit Serializable' vermeiden sollte? – Lobsterrrr

+0

@sebszyller: Das Problem lag an 'List [Product with Serializable]', während ich es als 'List [List [Any]]' behandelte – Lobsterrrr

Antwort

0

Das Problem lag an List[Product with Serializable], während ich es tatsächlich als List[List[Any]] behandelt. Ich änderte die ursprüngliche RDD zu RDD[(String,Map[String,List[List[Any]]])] und jetzt funktioniert alles.