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.
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? –
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. –
Es tat, danke. Ich werde versuchen, es jetzt durchzuarbeiten. –