2016-08-07 4 views
3

Ich habe eine RDD eines Objekts kundenspezifischen Fall dieIn Apache Spark wie kann ich alle Zeilen einer RDD durch zwei gemeinsame Werte gruppieren?

{userId:"h245hv45uh", title: "The-BFG", seen: 1, timestamp: 2016-08-06 13:19:53.051000+0000} 

der Form ist Gibt es eine Möglichkeit kann ich Gruppe alle Zeilen, die die gleiche Benutzer-ID und Titel haben, und dann eine einzelne Zeile in einem neuen RDD erstellen mit der gleichen userId und Titel, aber mit allen 'gesehenen' Werten hinzugefügt?

{userId:"h245hv45uh", title: "The-BFG", seen: 71, timestamp: 2016-08-06 13:19:53.051000+0000} 

wie das^wenn es 71 Zeilen mit der gleichen userId und Titel gab?

Die ursprüngliche RDD hat mehrere Titel und Benutzer-IDs und ich versuche, die Partitur zu aggregieren, Filterung zur Anpassung userIds und Titel

Dank

Antwort

2

Sie können versuchen, es in ein Paar RDD Umwandlung dann reduceByKey mit :

def combFunc(cc1: CaseClass, cc2: CaseClass): CaseClass = { 
    cc1.copy(seen = cc1.seen + cc2.seen) 
} 

val newRDD = rdd 
    .map(i => ((i.userId, i.title), i)) // converting into a PairRDD 
    .reduceByKey(combFunc) // reducing by key 
    .values // converting back to an RDD[CaseClass] 
Verwandte Themen