Wie gruppiere ich nach mehreren Schlüsseln in spark?

Ich habe eine Reihe von Tupeln, die in Form von zusammengesetzten Schlüsseln und Werten vorliegen. Beispielsweise

tfile.collect() = [(('id1','pd1','t1'),5.0), 
     (('id2','pd2','t2'),6.0),
     (('id1','pd1','t2'),7.5),
     (('id1','pd1','t3'),8.1)  ]

Ich möchte SQL-ähnliche Vorgänge für diese Sammlung ausführen, bei denen ich die Informationen basierend auf ID [1..n] oder PD [1..n] aggregieren kann. Ich möchte mit dem Vanilla Pyspark Apis und nicht mit SQLContext implementieren. In meiner aktuellen Implementierung lese ich aus einer Reihe von Dateien und füge die RDD zusammen.

def readfile():
    fr = range(6,23)
    tfile = sc.union([sc.textFile(basepath+str(f)+".txt")
                        .map(lambda view: set_feature(view,f)) 
                        .reduceByKey(lambda a, b: a+b)
                        for f in fr])
    return tfile

Ich beabsichtige, ein aggregiertes Array als Wert zu erstellen. Beispielsweise

agg_tfile = [((id1,pd1),[5.0,7.5,8.1])]

wobei 5.0,7.5,8.1 [t1, t2, t3] darstellen. Ich bin derzeit dabei, dasselbe durch Vanille-Python-Code unter Verwendung von Wörterbüchern zu erreichen. Es funktioniert gut für kleinere Datensätze. Aber ich mache mir Sorgen, da dies möglicherweise nicht für größere Datensätze skaliert. Gibt es eine effiziente Möglichkeit, dasselbe mit pyspark apis zu erreichen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage