2016-11-08 7 views
0

Ich bin neu in Zündkerzen und Scala und ich brauche wirklich etwas Hilfe mit der folgenden RDD Transformation:Manipulieren von Vektoren und Listen in RDDs

INPUT (macaddress, Vector (List (TS1, TS2), List (TS2, TS3), List .....)

(c8:3a:bv:b1:3a:e0,Vector(List(1472820071, 1472821088), List(1472821088, 1472821429), List(1472821429, 1472824217)))

desided OUTPUT (macaddress, Vektor (intValue, intValue, ...))

(c8:3a:bv:b1:3a:e0,Vector(1472821088-1472820071, 1472821429-1472821088,1472824217-1472821429))

Kurz gesagt, ich habe eine rdd bereits nach Schlüssel (macAddress) gruppiert, die Paired-Listen von Werten enthält. Ich muss den Vector of Lists in einen Vector transformieren, der die aus den Listen berechneten gepaarten Differenzen enthält (secondElement-firstElement). Die Anzahl der gepaarten Listen in Vector ist in RDD variabel (hängt von der betrachteten macAddress ab)

Ich weiß nicht, welche Transformation ich in diesem Fall verwenden muss.

Dank

Antwort

0

Updates Stellen basierend auf Ihren Datentyp

def flattenRDDElements(x:(macAddress,Vector[List[Int]])) : (macAddress,Vector[String]) = { 
    x match { 
     case (s,y) => (s,y.map(switchListElements)) 
    } 
    } 

    def switchListElements(x: List[Int]):String = x match { 
    case a::b::Nil => b+"-"+a 
    } 

    rdd.map(r => flattenRDDElements(r)) 
2

Sie können mapValues:

rdd.mapValues(vs => vs.map { 
    case x :: y :: Nil => x - y 
    case _ => 0 
}) 
Verwandte Themen