2016-06-07 13 views
4

Ich habe ein Datenrahmen df mit 9000 einzigartigen IDs.Zufallsauswahl in pyspark mit ersatz

wie

| id | 
    1 
    2 

mag ich mit Ersatz dieser 9000 ids 100000 mal eine Stichprobe generieren. Wie mache ich es in pyspark

Ich versuchte df.sample (True, 0.5,100)

Aber ich weiß nicht, wie genau

+0

Um klar zu sein, müssen Sie eine zufällige Stichprobe von 9000 IDs nehmen, wobei jede Probe 4.500 IDs enthält (was könnte wiederholen, da wir mit Ersatz probieren), und Sie 100.000 dieser Proben benötigen? –

+0

9000 ist die Population von verschiedenen IDs, die ich habe, ich möchte die Bevölkerung auf 100000 mit Ersatz und zufällig überspielen. also in einfachem Englisch, ich möchte eine zufällige ID 100000 mal aus einem Glas von 9000 IDs auf zufällige Art und Weise aufnehmen. Ich hoffe das hilft. –

+0

Es tat, danke. Ich werde versuchen, es jetzt durchzuarbeiten. –

Antwort

7

Okay, also zuerst die Dinge zu 100000 Zahl erhalten zuerst. Sie werden wahrscheinlich nicht in der Lage sein, genau 100.000 in Ihrer (Über) Probe zu bekommen. Der Grund dafür ist, dass Spark, um effizient zu samplen, etwas namens Bernouilli Sampling verwendet. Grundsätzlich bedeutet dies, dass es Ihre RDD durchläuft und jeder Zeile eine Wahrscheinlichkeit der Einbeziehung zuweist. Wenn Sie also ein 10% Sample haben möchten, hat jede Zeile eine Chance von 10%, eingeschlossen zu werden, aber sie berücksichtigt nicht, ob sie perfekt zu der gewünschten Zahl addiert wird, aber sie ist für große Datasets ziemlich nah.

Der Code würde wie folgt aussehen: df.sample(True, 11.11111, 100). Dadurch wird ein Beispiel des Datasets 11,11111 mal der Größe des ursprünglichen Datasets entsprechen. Seit 11.11111 * 9.000 ~ = 100.000 erhalten Sie ungefähr 100.000 Zeilen.

Wenn Sie eine genaue Probe wollen, müssen Sie df.takeSample(True, 100000) verwenden. Dies ist jedoch kein verteilter Datensatz. Dieser Code gibt ein Array zurück (ein sehr großes). Wenn es im Hauptspeicher erstellt werden kann, dann tu das. Da Sie jedoch die genau richtige Anzahl von IDs benötigen, ist mir keine Möglichkeit bekannt, dies auf verteilte Weise zu tun.

+0

Hallo Katya, vielen Dank für die Antwort. Ich habe die genaue Anzahl nicht bekommen, aber wenn ich es so nenne, dass es gut genug ist. –

+0

Sie meinen wahrscheinlich df.rdd.takeSample()? Es gibt keine solche Methode df.takeSample() – Marko

+0

.sample() funktioniert nicht für Datenrahmen für mich, obwohl es in der Dokumentation angegeben ist. Es arbeitet an RDD. Was vermisse ich? – Neo