2016-06-07 4 views
4

고유 ID가 9000 개인 데이터 프레임 df가 있습니다.교체로 pyspark에서 무작위 샘플링

| id | 
    1 
    2 

처럼 교체와 무작위 표본이 9000 IDS 100000 번 생성합니다. 내가 (사실, 0.5,100) df.sample

을 시도하지만 정확한 100000 수

+0

분명히하려면 9000 개의 ID가있는 무작위 샘플을 가져와야합니다. 각 샘플에는 4,500 개의 ID가 있으며 (대체 샘플링 이후 반복 될 수 있음)이 샘플이 10 만 개가 필요합니까? –

+0

9000은 내가 가지고있는 고유 한 ID의 인구이며, 인구를 100000으로 대체하고 무작위로 초과 할당하려고합니다. 그래서 평범한 영어로, 난 무작위로 9000 ID의 항아리에서 100000 번 무작위 ID를 선택하고 싶습니다. 이게 도움이 되길 바란다. –

+0

감사합니다. 나는 그것을 통해 지금 일하려고 노력할 것이다. –

답변

7

좋아에 도착하는 방법을 알고, 그래서 첫 번째 것들하지 않는

pyspark에 그것을 어떻게 먼저. 당신은 아마 당신의 (이상) 표본에서 정확히 10 만명을 얻을 수 없을 것입니다. 왜 샘플링을 효율적으로하기 위해서 Spark는 Bernouilli Sampling이라는 것을 사용합니다. 기본적으로 이는 RDD를 통과하고 각 행에 포함될 확률을 지정합니다. 따라서 10 % 샘플을 원할 경우 각 행마다 개별적으로 10 %의 확률이 포함되지만 원하는 개수만큼 완벽하게 합치면 고려하지 않지만 큰 데이터 세트의 경우에는 매우 가깝습니다.

코드는 다음과 같습니다 : df.sample(True, 11.11111, 100). 그러면 원본 데이터 세트의 크기 인 11.11111 배에 해당하는 데이터 세트 샘플이 생성됩니다. 11.11111 * 9,000 ~ = 100,000 이후로 약 10 만 개의 행이 생성됩니다.

정확한 샘플을 원하면 df.takeSample(True, 100000)을 사용해야합니다. 그러나 분산 데이터 셋이 아닙니다. 이 코드는 배열 (매우 큰 배열)을 반환합니다. 그것이 메인 메모리에서 생성 될 수 있다면 그렇게하십시오. 그러나 정확한 ID 번호가 필요하므로 분산 된 방식으로이를 수행하는 방법을 알지 못합니다.

+0

안녕하세요 카티아, 정말 고마워요. 정확한 카운트를 얻지는 못했지만, 원하는대로 샘플링하면 충분합니다. –

+0

아마 df.rdd.takeSample()을 의미할까요? 그런 방법은 없습니다. df.takeSample() – Marko

+0

.sample()은 설명서에 나와 있지만 데이터 프레임에서는 작동하지 않습니다. 그것은 RDD에서 일하고 있습니다. 나는 무엇을 놓치고 있습니까? – Neo