J'ai un DataFrame avec N Attributs (Atr1, Atr2, Atr3, ..., AtrN) et une instance individuelle avec le même [1..N-1 ] attributs, sauf le Nième. Je veux vérifier s'il y a une instance dans le DataFrame avec les mêmes valeurs pour les attributs [1..N-1] de l'instance, et si elle existe une occurrence de cette instance, mon but est d'obtenir l'instance dans le DataFrame avec les attributs [1..N].La recherche d'une instance dans une base de données dans Pyspark avec un filtre prend trop de temps
Par exemple, si j'ai:
Instance:
[Row(Atr1=u'A', Atr2=u'B', Atr3=24)]
Dataframe:
+------+------+------+------+
| Atr1 | Atr2 | Atr3 | Atr4 |
+------+------+------+------+
| 'C' | 'B' | 21 | 'H' |
+------+------+------+------+
| 'D' | 'B' | 21 | 'J' |
+------+------+------+------+
| 'E' | 'B' | 21 | 'K' |
+------+------+------+------+
| 'A' | 'B' | 24 | 'I' |
+------+------+------+------+
Je veux obtenir la 4ème ligne de la trame de données aussi avec la valeur de ATR4.
Je l'ai essayé avec « filtre() » méthode comme ceci:
df.filter("Atr1 = 'C' and Atr2 = 'B', and Atr3 = 24").take(1)
Et je reçois le résultat que je voulais, mais il a fallu beaucoup de temps. Donc, ma question est la suivante: y a-t-il un moyen de faire la même chose, mais en moins de temps?
Merci!
Un peu plus d'informations serait utile ici. En particulier: combien de temps cela prend-il? Combien de temps voulez-vous prendre? Quelle est la taille du cluster/matériel sur lequel vous l'utilisez? En général, quelle que soit la taille de votre cluster, il y aura des frais généraux en cas d'opération d'étincelle car une étincelle doit distribuer vos données et votre code au cluster, puis rassembler les résultats. Faire quelque chose de simple comme ça dans pyspark ne sera jamais aussi rapide que de faire quelque chose d'aussi simple en python sur votre machine locale. –