Como agrupar por várias chaves no spark?

Eu tenho um monte de tuplas que estão na forma de chaves e valores compostos. Por exemplo,

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

Quero executar operações como sql nesta coleção, onde posso agregar as informações com base no id [1..n] ou no pd [1..n]. Eu quero implementar usando as APIs vanilla pyspark e não usando SQLContext. Na minha implementação atual, estou lendo vários arquivos e mesclando o 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

Pretendo criar uma matriz agregada como um valor. Por exemplo,

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

onde 5.0,7,5,8.1 representa [t1, t2, t3]. Atualmente, estou conseguindo o mesmo código vanilla python usando dicionários. Funciona bem para conjuntos de dados menores. Mas me preocupo, pois isso pode não ser dimensionado para conjuntos de dados maiores. Existe uma maneira eficiente de conseguir o mesmo usando as APIs do pyspark?

questionAnswers(2)

yourAnswerToTheQuestion