दिलचस्प पोस्ट
ए के एजेक्स टैग की घटना विशेषता को मैं कौन सा मान कर सकता हूं? MySQL में "रिवर्स ग्रुप_CONCAT"? ऑनक्लिक के साथ PHP फ़ंक्शन निष्पादित करें कैसे जावा में sha256 के साथ कुछ स्ट्रिंग हैश करने के लिए? UIPickerView जो यूआईडीएटपीकर की तरह दिखता है लेकिन सेकंड के साथ PHP में json को xml में बदलने का कोई तरीका है? किसी फ़ाइल में Android लॉकेट डेटा लिखें कार्य टास्क हर एक्स मिनट के साथ विंडोज टास्क समयबद्धक कैसे webservice यूआरएल समापन बिंदु को बदलने के लिए? स्लैश (/) बनाम टिल्ड स्लैश (~ /) asp.net में शैली पत्रक पथ में मैं अजगर में नेस्टेड क्लास कैसे निकाल सकता हूं? ऑब्जेक्ट गुणों के माध्यम से फिराना कभी-कभी WCF सेवा संदर्भ जोड़ना एक खाली संदर्भ cs उत्पन्न करता है Angular2 रूपों में इनपुट मुखौटा फ़ील्ड SQL सर्वर डीबी में सभी सूचकांक और अनुक्रमणिका कॉलम की सूची

स्पार्क 2.0 डेटासेट बनाम डेटाफ़्रेम

स्पार्क 2.0.1 के साथ शुरू करना मैंने बहुत सारे दस्तावेज़ पढ़ा है लेकिन अभी तक पर्याप्त उत्तर नहीं मिल सका:

  • के बीच क्या अंतर है
    • df.select("foo")
    • df.select($"foo")
  • क्या मैं सही ढंग से समझता हूं कि
    • myDataSet.map(foo.someVal) typesafe है और आरडीडी में परिवर्तित नहीं होगा लेकिन डेटासेट प्रतिनिधित्व में / कोई अतिरिक्त ओवरहेड (2.0.0 के लिए प्रदर्शन के अनुसार)
  • अन्य सभी आदेशों का चयन करें, .. ये वाक्यात्मक चीनी हैं वे टाइपराफ नहीं हैं और इसके बजाय एक मानचित्र का उपयोग किया जा सकता है। मैं कैसे नक्शा स्टेटमेंट के बिना df.select("foo") टाइप-सुरक्षित सकता हूं?
    • मुझे मानचित्र के स्थान पर यूडीएफ / यूएडीएफ का उपयोग क्यों करना चाहिए? (डेटासेट के प्रतिनिधित्व में नक्शा मानते हुए)?

वेब के समाधान से एकत्रित समाधान "स्पार्क 2.0 डेटासेट बनाम डेटाफ़्रेम"

  1. df.select("foo") और df.select($"foo") बीच अंतर हस्ताक्षर है। पूर्व में कम से कम एक String , बाद में एक शून्य या अधिक Columns । इससे परे कोई व्यावहारिक अंतर नहीं है
  2. myDataSet.map(foo.someVal) प्रकार सुरक्षित है लेकिन जैसा कि किसी भी Dataset ऑपरेशन RDD का उपयोग करता है और DataFrame संचालन की तुलना में वहाँ एक महत्वपूर्ण ओवरहेड है। आइए एक सरल उदाहरण पर एक नज़र डालें:

     case class FooBar(foo: Int, bar: String) val ds = Seq(FooBar(1, "x")).toDS ds.map(_.foo).explain 
     == Physical Plan == *SerializeFromObject [input[0, int, true] AS value#123] +- *MapElements <function1>, obj#122: int +- *DeserializeToObject newInstance(class $line67.$read$$iw$$iw$FooBar), obj#121: $line67.$read$$iw$$iw$FooBar +- LocalTableScan [foo#117, bar#118] 

    जैसा कि आप देख सकते हैं कि इस निष्पादन योजना को सभी क्षेत्रों तक पहुंच की आवश्यकता होती है और इसके लिए DeserializeToObject

  3. नहीं। सामान्य तौर पर अन्य विधियां वाक्यात्मक चीनी नहीं हैं और काफी अलग निष्पादन योजना उत्पन्न करती हैं। उदाहरण के लिए:

     ds.select($"foo").explain 
     == Physical Plan == LocalTableScan [foo#117] 

    इससे पहले दिखाया गया योजना के मुकाबले कॉलम सीधे पहुंच सकता है यह एपीआई की बहुत अधिक सीमा नहीं है, लेकिन ऑपरेशन सिमेंटिक में अंतर के परिणामस्वरूप।

  4. मैं कैसे नक्शा स्टेटमेंट के बिना df.select ("foo") टाइप-सुरक्षित सकता हूं?

    ऐसा कोई विकल्प नहीं है जबकि टाइप किए गए कॉलम आपको स्टेटिक Dataset को एक और स्थिर रूप से टाइप किए गए Dataset में बदलने की अनुमति देते हैं:

     ds.select($"bar".as[Int]) 

    वहाँ सुरक्षित प्रकार नहीं हैं टाइप सुरक्षित एग्रीग्रेन्स जैसे टाइप सुरक्षित ऑप्टिमाइज्ड ऑपरेशंस को शामिल करने के कुछ अन्य प्रयास हैं, लेकिन यह प्रयोगात्मक API।

  5. मुझे एक मानचित्र के बजाय UDF / UADF का उपयोग क्यों करना चाहिए?

    यह पूरी तरह से आप पर निर्भर है। स्पार्क में प्रत्येक वितरित डाटा संरचना अपने फायदे और नुकसान प्रदान करता है। निजी तौर पर मैं स्थिर रूप से टाइप किए गए Dataset को कम से कम उपयोगी साबित करता हूं:

    • Dataset[Row] रूप में समान श्रेणी प्रदान नहीं करें (हालांकि वे स्टोरेज प्रारूप साझा करते हैं और कुछ निष्पादन योजना ऑप्टिमाइज़ेशन जो इसे कोड पीढ़ी या ऑफ-हेप स्टोरेज से पूरी तरह से लाभ नहीं देता) और न ही सभी विश्लेषणात्मक क्षमताओं तक पहुंच DataFrame
    • RDDs रूप में उतने लचीले नहीं हैं जितने कि मूल प्रकार के एक छोटे उपसमूह के साथ समर्थित हैं।
    • एनकोडर्स के साथ सुरक्षा टाइप करें विवादास्पद है।