Se si desidera un campione esatto, prova a fare
a.takeSample(false, 1000)
Ma si noti che questo restituisce un array e non un RDD
.
Per quanto riguarda il motivo per cui lo a.sample(false, 0.1)
non restituisce la stessa dimensione del campione: questo perché la scintilla utilizza internamente qualcosa chiamato Bernoulli sampling per prelevare il campione. L'argomento fraction
non rappresenta la frazione della dimensione effettiva dell'RDD. Rappresenta la probabilità che ciascun elemento della popolazione venga selezionato per il campione e come dice wikipedia:
Poiché ciascun elemento della popolazione è considerato separatamente per il campione, la dimensione del campione non è fissa ma segue piuttosto un distribuzione binomiale.
E ciò significa essenzialmente che il numero non rimane fisso.
Se si imposta il primo argomento su true
, verrà utilizzato un valore denominato Poisson sampling, che determinerà anche una dimensione campione risultante non deterministica.
Aggiornamento
Se si vuole attaccare con il metodo sample
, probabilmente si può specificare una probabilità più grande per il fraction
param e quindi chiamare take
come in:
a.sample(false, 0.2).take(1000)
Questo dovrebbe, la maggior parte dei il tempo, ma non necessariamente sempre, porta alla dimensione del campione di 1000. Questo potrebbe funzionare se si dispone di una popolazione abbastanza grande.
fonte
2015-09-29 07:15:25
http://stackoverflow.com/a/26830575/494526 – rebeling