J'essaie de reproduire le code de pandas dans pyspark 2.x.
Disons que j'ai un cadre de données comme suit :
age education country
0 22 A Canada
1 34 B Mongolia
2 55 A Peru
3 44 C Korea
Habituellement, dans pandas, je mettrais à l'échelle les colonnes numériques et j'encoderais à chaud les colonnes catégorielles et j'obtiendrais :
age education_A education_B education_C country_Canada country_Mongolia ...
0 0 1 0 0 1 0
1 0.3 0 1 0 0 0
2 1 1 0 0 0 0 ...
3 0.7 0 0 1 ... ...
Dans pyspark j'ai fait
str_indexer1 = StringIndexer(inputCol="education", outputCol=education+"_si", handleInvalid="skip")
str_indexer2 = StringIndexer(inputCol="country", outputCol=country+"_si", handleInvalid="skip")
mod_df = str_indexer1.fit(df).transform(df)
mod_df = str_indexer2.fit(df).transform(mod_df)
ohe1 = OneHotEncoder(inputCol="education", outputCol=education+"_ohe")
ohe2 = OneHotEncoder(inputCol="country", outputCol=country+"_ohe")
ohe1.fit(mod_df).transform(mod_df)
Cela me donne
age education country education_si country_si education_ohe
0 0 A Canada 1 1 (1,0,0,0)
1 0.3 B Mongolia 2 2 (0,1,0,0)
2 1 A Peru 1 3 (1,0,0,0)
3 0.7 C Korea 3 4 (0,0,1,0)
A partir de là, je n'arrive pas à trouver comment exploser education_ohe en education_A, etc...
Comment puis-je faire cela et y a-t-il un moyen plus efficace d'exécuter ohe et scaler dans un grand dataframe ?