Spark unionAll plusieurs dataframes
Pour un ensemble de dataframes
val df1 = sc.parallelize(1 to 4).map(i => (i,i*10)).toDF("id","x")
val df2 = sc.parallelize(1 to 4).map(i => (i,i*100)).toDF("id","y")
val df3 = sc.parallelize(1 to 4).map(i => (i,i*1000)).toDF("id","z")
à l'union de tous, je ne
df1.unionAll(df2).unionAll(df3)
Est-il plus élégant et évolutive, la façon de faire cela pour un certain nombre de dataframes, par exemple à partir de
Seq(df1, df2, df3)
OriginalL'auteur echo | 2016-06-03
Vous devez vous connecter pour publier un commentaire.
La solution la plus simple est de
reduce
avecunion
(unionAll
Spark < 2.0):C'est relativement concis et de ne pas déplacer les données de segment de mémoire de stockage
mais s'étend de la lignée avec chaque unionnécessite un temps non linéaire pour effectuer l'analyse des plans. ce qui peut être un problème si vous essayez de fusionner un grand nombre deDataFrames
.Vous pouvez également convertir à
RDDs
et l'utilisationSparkContext.union
:Il garde
de la lignée courtanalyse des coûts bas, mais sinon, il est moins efficace que la fusionDataFrames
directement.Est-ce aussi simple dans scala ? Quel serait-il ?
Comment serait l'équivalent de ce code dans pySpark?
OriginalL'auteur zero323
Pour pyspark vous pouvez effectuer les opérations suivantes:
Il est également intéressant de noter que l'ordre des colonnes dans la dataframes doit être le même pour que cela fonctionne. Cela peut silencieusement donner des résultats inattendus si vous n'avez pas la bonne colonne commandes!!
Si vous utilisez pyspark 2.3 ou supérieur, vous pouvez utiliser unionByName de sorte que vous n'avez pas à modifier l'ordre des colonnes.
OriginalL'auteur TH22