L'échantillonnage aléatoire dans pyspark avec remplacement
J'ai un dataframe df avec 9000 identifiants uniques.
comme
| id |
1
2
Je veux générer un échantillon aléatoire avec le remplacement de ces 9000 id 100000 fois.
Comment puis-je le faire dans pyspark
J'ai essayé
df.de l'échantillon(True,0.5,100)
Mais je ne sais pas comment arriver à 100000 le nombre exact
Pour être clair, vous avez besoin de prendre un échantillon aléatoire de 9000 id, où chaque échantillon est de 4 500 identifiants (qui pourrait se répéter depuis que nous avons échantillon avec remplacement), et vous avez besoin de 100 000 de ces échantillons?
9000 est la population de distinctes id que j'ai, je veux suréchantillonnage à la population de 100000 avec remplacement et de façon aléatoire. donc en clair, je veux ramasser un id aléatoire 100000 fois à partir d'un pot de 9000 id d'une façon aléatoire. J'espère que cette aide.
Il l'a fait, merci. Je vais essayer de travailler à travers maintenant.
9000 est la population de distinctes id que j'ai, je veux suréchantillonnage à la population de 100000 avec remplacement et de façon aléatoire. donc en clair, je veux ramasser un id aléatoire 100000 fois à partir d'un pot de 9000 id d'une façon aléatoire. J'espère que cette aide.
Il l'a fait, merci. Je vais essayer de travailler à travers maintenant.
OriginalL'auteur Shweta Kamble | 2016-06-07
Vous devez vous connecter pour publier un commentaire.
Bon, alors tout d'abord. Vous n'aurez probablement pas être en mesure d'obtenir exactement de 100 000 dans votre (plus)de l'échantillon. La raison en est que, pour l'échantillon de manière efficace, une Étincelle utilise ce qu'on appelle Bernouilli D'Échantillonnage. En gros, cela signifie qu'il passe au travers de votre CA, et attribue à chaque ligne une probabilité d'être inclus. Donc, si vous voulez un 10% de l'échantillon, chaque ligne individuellement a 10% de chance d'être compris mais il ne prend pas en compte que si elle ajoute en place parfaitement pour le nombre que vous voulez, mais il a tendance à être assez proche pour grands ensembles de données.
Le code devrait ressembler à ceci:
df.sample(True, 11.11111, 100)
. Cela va prendre un échantillon de l'ensemble de données égale à 11.11111 fois la taille du jeu de données d'origine. Depuis 11.11111*de 9 000 ~= 100.000, vous obtiendrez environ 100 000 lignes.Si vous voulez un échantillon exacte, vous devez utiliser
df.takeSample(True, 100000)
. Cependant, ce n'est pas distribuée de données. Ce code renvoie une Matrice de (très grand). Si il peut être créé dans la Mémoire Principale, puis le faire. Cependant, parce que vous avez besoin de l'exacte numéro d'Id, je ne sais pas d'une façon de le faire que dans un mode de distribution.Tu veux sans doute dire df.rdd.takeSample() ? Il n'y a pas une telle méthode df.takeSample()
.exemple() ne fonctionne pas sur dataframes pour moi, même si ses données dans la documentation. Il travaille sur des RDD. Ce qui me manque?
Consultez la documentation spark.apache.org/docs/2.1.0/api/python/...
OriginalL'auteur Katya Handler