J'ai 10 trames de données pyspark.sql.dataframe.DataFrame
, obtenues à partir randomSplit
de (td1, td2, td3, td4, td5, td6, td7, td8, td9, td10) = td.randomSplit([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1], seed = 100)
maintenant , je veux rejoindre 9 td
« s en une seule trame de données, comment dois - je faire?
J'ai déjà essayé avec unionAll
, mais cette fonction n'accepte que deux arguments.
td1_2 = td1.unionAll(td2)
# this is working fine
td1_2_3 = td1.unionAll(td2, td3)
# error TypeError: unionAll() takes exactly 2 arguments (3 given)
Existe-t-il un moyen de combiner plus de deux trames de données en ligne?
Le but de cela est que je fais la validation croisée 10 fois manuellement sans utiliser la CrossValidator
méthode PySpark , donc en prenant 9 en formation et 1 en données de test, puis je le répéterai pour d'autres combinaisons.
python
apache-spark
cross-validation
pyspark
krishna Prasad
la source
la source
Réponses:
Volé à: /programming/33743978/spark-union-of-multiple-rdds
En dehors de l'enchaînement des syndicats, c'est la seule façon de le faire pour les DataFrames.
Ce qui se passe, c'est qu'il prend tous les objets que vous avez passés en tant que paramètres et les réduit à l'aide de unionAll (cette réduction provient de Python, pas de la réduction Spark bien qu'ils fonctionnent de manière similaire), ce qui le réduit finalement à un DataFrame.
Si au lieu de DataFrames ce sont des RDD normaux, vous pouvez passer une liste d'entre eux à la fonction d'union de votre SparkContext
EDIT: Pour votre objectif, je propose une méthode différente, car vous devrez répéter cette union 10 fois pour vos différents plis pour la validation croisée, j'ajouterais des étiquettes pour lesquelles appartient une ligne et je filtrerais simplement votre DataFrame pour chaque pli en fonction de l'étiquette
la source
Parfois, lorsque les cadres de données à combiner n'ont pas le même ordre de colonnes, il est préférable de df2.select (df1.columns) afin de s'assurer que les deux df ont le même ordre de colonnes avant l'union.
Exemple:
sinon, il générerait le résultat ci-dessous à la place.
la source
Que diriez-vous d'utiliser la récursivité?
la source