2015-09-29 6 views
5

स्पार्क आरडीडी पर "नमूना" फ़ंक्शन क्यों अलग-अलग तत्वों को लौटाता है भले ही अंश पैरामीटर समान है? बराबर नहींस्पार्क आरडीडी में सटीक नमूना आकार के साथ नमूना कैसे प्राप्त करें?

val a = sc.parallelize(1 to 10000, 3) 
a.sample(false, 0.1).count 

हर बार जब मैं कोड यह एक अलग नंबर प्रदान की दूसरी पंक्ति चलाने 1000 असल में मैं 1000 हर बार हालांकि 1000 तत्व हो सकता है देखने की उम्मीद कर रहे हैं: उदाहरण के लिए, मेरे कोड के नीचे की तरह है अगर अलग बनो। क्या कोई मुझे बता सकता है कि मैं सैंपल आकार के साथ 1000 के बराबर नमूना कैसे प्राप्त कर सकता हूं? आपका बहुत बहुत धन्यवाद।

+0

http://stackoverflow.com/a/26830575/494526 – rebeling

उत्तर

10

आप एक सटीक नमूना चाहते हैं,

a.takeSample(false, 1000) 

करने का प्रयास करें लेकिन ध्यान दें कि यह किसी सरणी, न कि किसी RDD देता है।

क्यों a.sample(false, 0.1) समान नमूना आकार वापस नहीं करता है: ऐसा इसलिए है क्योंकि स्पार्क आंतरिक रूप से नमूना लेने के लिए Bernoulli sampling नामक किसी चीज़ का उपयोग करता है। fraction तर्क आरडीडी के वास्तविक आकार के अंश का प्रतिनिधित्व नहीं करता है। यह जनसंख्या में प्रत्येक तत्व की संभावना का प्रतिनिधित्व नमूना के लिए चयनित हो रही है, और विकिपीडिया कहते हैं:

क्योंकि आबादी के प्रत्येक तत्व नमूना के लिए अलग से माना जाता है, नमूने का आकार तय नहीं है बल्कि एक प्रकार है द्विपद वितरण।

और इसका अनिवार्य रूप से मतलब है कि संख्या तय नहीं है।

यदि आप true पर पहला तर्क सेट करते हैं, तो यह Poisson sampling नामक कुछ का उपयोग करेगा, जिसके परिणामस्वरूप एक गैर-निर्धारिती परिणामी नमूना आकार भी होगा।

अद्यतन

आप sample विधि के साथ चिपके रहते हैं चाहते हैं, तो आप शायद एक बड़ा संभावना fraction परम के लिए निर्दिष्ट कर सकते हैं और उसके बाद में के रूप में take फोन:

a.sample(false, 0.2).take(1000) 

यह होना चाहिए, सबसे की समय, लेकिन जरूरी नहीं, परिणामस्वरूप 1000 के नमूना आकार में परिणाम होता है। यदि आपके पास पर्याप्त पर्याप्त आबादी है तो यह काम कर सकता है।

+0

आप अपने विवरण के लिए बहुत बहुत धन्यवाद। – Carter

1

एक और तरीका पहले लेने के लिए हो सकता है नमूना और फिर आरडीडी बनाओ। यह बड़े डेटासेट के साथ धीमा हो सकता है।

sc.makeRDD(a.takeSample(false, 1000, 1234)) 
संबंधित मुद्दे