Remodelagem / rotação de dados no Spark RDD e / ou Spark DataFrames

Eu tenho alguns dados no seguinte formato (RDD ou Spark DataFrame):

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

 rdd = sc.parallelize([('X01',41,'US',3),
                       ('X01',41,'UK',1),
                       ('X01',41,'CA',2),
                       ('X02',72,'US',4),
                       ('X02',72,'UK',6),
                       ('X02',72,'CA',7),
                       ('X02',72,'XX',8)])

# convert to a Spark DataFrame                    
schema = StructType([StructField('ID', StringType(), True),
                     StructField('Age', IntegerType(), True),
                     StructField('Country', StringType(), True),
                     StructField('Score', IntegerType(), True)])

df = sqlContext.createDataFrame(rdd, schema)

O que eu gostaria de fazer é 'remodelar' os dados, converter determinadas linhas no país (especificamente EUA, Reino Unido e CA) em colunas:

ID    Age  US  UK  CA  
'X01'  41  3   1   2  
'X02'  72  4   6   7   

Essencialmente, eu preciso de algo como o Pythonpivot fluxo de trabalho:

categories = ['US', 'UK', 'CA']
new_df = df[df['Country'].isin(categories)].pivot(index = 'ID', 
                                                  columns = 'Country',
                                                  values = 'Score')

Meu conjunto de dados é bastante grande, então não possocollect() e ingerir os dados na memória para fazer a remodelagem no próprio Python. Existe uma maneira de converter o Python.pivot() em uma função invocável ao mapear um RDD ou um Spark DataFrame? Qualquer ajuda seria apreciada!

questionAnswers(6)

yourAnswerToTheQuestion