Nếu bạn muốn một mẫu chính xác, hãy thử làm
a.takeSample(false, 1000)
Nhưng lưu ý rằng điều này trả về một mảng và không phải là một RDD
.
Vì lý do tại sao, a.sample(false, 0.1)
không trả lại cùng kích thước mẫu: đó là do tia lửa trong nội bộ sử dụng thứ gọi là Bernoulli sampling để lấy mẫu. Đối số fraction
không đại diện cho phần nhỏ của kích thước thực của RDD. Nó đại diện cho xác suất của mỗi phần tử trong dân số được chọn cho mẫu, và như wikipedia nói:
Vì mỗi phần tử được xem xét riêng biệt cho mẫu, kích thước mẫu không cố định mà đúng hơn là sau phân phối nhị thức.
Và điều đó về cơ bản có nghĩa là số đó không cố định.
Nếu bạn đặt đối số đầu tiên thành true
, thì nó sẽ sử dụng một thứ gọi là Poisson sampling, điều này cũng dẫn đến kích thước mẫu kết quả không xác định.
Cập nhật
Nếu bạn muốn gắn bó với phương pháp sample
, bạn có thể có thể chỉ định một xác suất lớn hơn cho các fraction
param và sau đó gọi take
như trong:
a.sample(false, 0.2).take(1000)
này nên, hầu hết các thời gian, nhưng không nhất thiết phải luôn luôn, dẫn đến kích thước mẫu là 1000. Điều này có thể hiệu quả nếu bạn có đủ dân số.
Nguồn
2015-09-29 07:15:25
http://stackoverflow.com/a/26830575/494526 – rebeling