ho alcuni dati nel seguente formato (sia RDD o una scintilla dataframe):Rimodellare/dati di snodo Spark RDD e/o scintille DataFrames
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)
Quello che vorrei fare è quello di 'rimodellare' il dati, convertire alcune righe in Paese (in particolare Stati Uniti, Regno Unito e CA) nelle colonne:
ID Age US UK CA
'X01' 41 3 1 2
'X02' 72 4 6 7
in sostanza, ho bisogno di qualcosa lungo le linee di pivot
flusso di lavoro di Python:
categories = ['US', 'UK', 'CA']
new_df = df[df['Country'].isin(categories)].pivot(index = 'ID',
columns = 'Country',
values = 'Score')
Il mio set di dati è piuttosto grande, quindi non posso davvero fare il collect()
e ingerire i dati in memoria per eseguire il rimodellamento in Python stesso. C'è un modo per convertire Python .pivot()
in una funzione invokable mentre si mappano o un RDD o Spark DataFrame? Qualsiasi aiuto sarebbe apprezzato!
I dati mi sembrano funky. I dati per 'X02' non corrispondono all'output. –
@David Griffin, non sono sicuro di cosa intendi quando dici "I dati X02 non corrispondono all'output". I dati nella mia domanda sono il mio costrutto ma rappresentano i registri delle chiamate Intelligent Voice Recognition (IVR). Spesso, vedrai migliaia di queste coppie KV (Paese, Punteggio dal mio esempio). Parte della pulizia di questi dati comporta l'estrazione solo delle chiavi e dei valori necessari. Se vedi il mio codice Python, fa esattamente questo (mentre filtra la chiave Country = 'XX'. – Jason
Ad esempio, nella definizione RDD hai ('X02', 72, 'US', 7) che significherebbe un 7 nella colonna degli Stati Uniti, ma nei risultati si ha 'X02' con un 4 nella colonna degli Stati Uniti –