¿Cómo agrupar por múltiples teclas en spark?

Tengo un montón de tuplas que están en forma de claves y valores compuestos. Por ejemplo,

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

Quiero realizar operaciones tipo sql en esta colección, donde puedo agregar la información basada en id [1..n] o pd [1..n]. Quiero implementar usando las apis vanys pyspark y no usando SQLContext. En mi implementación actual, estoy leyendo un montón de archivos y fusionando el RDD.

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

Tengo la intención de crear una matriz agregada como valor. Por ejemplo,

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

donde 5.0,7.5,8.1 representan [t1, t2, t3]. Actualmente, estoy logrando lo mismo con el código vanilla python usando diccionarios. Funciona bien para conjuntos de datos más pequeños. Pero me preocupa, ya que esto puede no escalar para conjuntos de datos más grandes. ¿Hay alguna manera eficiente de lograr lo mismo usando pyspark apis?

Respuestas a la pregunta(2)

Su respuesta a la pregunta