2017-09-11 6 views
1

J'ai une base de données pyspark où certaines de ses colonnes contiennent un tableau de chaînes (et une colonne contient un tableau imbriqué). Par conséquent, je ne peux pas écrire le dataframe à un CSV.Convertir le tableau <string> en chaîne de caractères pyspark dataframe

Voici un exemple de dataframe que je traite -

+-------+--------------------+---------+ 
    |ID  |    emailed| clicked 
    +-------+--------------------+---------+ 
    |9000316|[KBR, NRT, AOR]  |[[AOR]] 
    |9000854|[KBR, NRT, LAX]  | Null 
    |9001996|[KBR, JFK]   |[[JFK]] 
    +-------+--------------------+---------+ 

Je voudrais obtenir la structure suivante, être enregistré en tant que csv.

+-------+--------------------+---------+ 
    |ID  |    emailed| clicked 
    +-------+--------------------+---------+ 
    |9000316|KBR, NRT, AOR  | AOR 
    |9000854|KBR, NRT, LAX  | Null 
    |9001996|KBR, JFK   | JFK 
    +-------+--------------------+---------+ 

Je suis très nouveau à pyspark. Votre aide est grandement appréciée. Je vous remercie!

+1

La colonne 'clicked' aura-t-elle toujours ce format -' [[valeur]] 'ou peut-elle être' [[val1, val2 ...]] '? –

Répondre

4

Pouvez-vous essayer de cette façon. Vous devrez importer le module

import pyspark.sql.functions.* 
df.select(concat_ws(',', split(df.emailed)).alias('string_form')).collect() 

Faites-moi savoir si cela aide.

----- ---- Mise à jour

code expliqué dans le lien, j'ai modifié un peu.

from pyspark.sql.functions import * 
from pyspark.sql.types import * 

def getter(column): 

    for i,col in enumerate(column): 
     if i==1: 
      col_new=col 
     else: 
      col_new=col_new+','+col 
    return col_new 

getterUDF = udf(getter, StringType()) 

df.select(getterUDF(Ur_Array_Column)) 

Vous pouvez également essayer ceci.

+0

Je ne sais pas si les éléments ci-dessus fonctionneront. Comme j'ai vérifié, split travaille ici sur la chaîne. Vous pouvez voir ceci aussi sur Stack Overflow. https://stackoverflow.com/questions/37689878/select-array-element-from-spark-dataframes-split-method-in-same-call –

+0

Vous pouvez utiliser cette fonction: –

+0

Merci, concat_ws fonctionne pour moi. – user42361