दिलचस्प पोस्ट
JQuery के बिना जावास्क्रिप्ट में मैं एक JSON फ़ाइल कैसे खोल सकता हूं? क्या संदर्भ से जावा पास है? सूचियों को ट्यूपल्स की सूची में कैसे मर्ज करना है? क्या एंड्रॉइड पीयर-टू-पीयर एड-हॉक नेटवर्किंग कर सकता है? जावा में वाष्पशील चर स्थानीय चर पर कचरा संग्रहण JSF फेसलेट: कभी-कभी मुझे यूआरएल .jsf और कभी-कभी .xhtml दिखता है। क्यूं कर? ग्रहण वेब परियोजना निर्भरता स्ट्रिंग से एचटीएमएल टैग को हटाने के लिए नियमित अभिव्यक्ति क्या एक कंपाइलर बग है जो कि एक is_complete प्रकार के गुण के कार्यान्वयन से उत्पन्न हुआ है? HTTP पुनर्निर्देशन: 301 (स्थायी) बनाम 302 (अस्थायी) नोड-अनुरोध – त्रुटि "SSL23_GET_SERVER_HELLO: अज्ञात प्रोटोकॉल" जावा बनने वाले नए घटक के लिए एफएक्सएमएल फ़ाइल बनाने के बजाय दृश्य बिल्डर को कैसे जोड़ें? java.lang.NoClassDefFound त्रुटि: संगठन / वसंतफ्रेमवर्क / कोर / एनवाईवी / कॉन्फ़िगर करने योग्य पर्यावरण सहकारिता में सी #

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

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

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

Solutions Collecting From Web of "स्पार्क 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 रूप में उतने लचीले नहीं हैं जितने कि मूल प्रकार के एक छोटे उपसमूह के साथ समर्थित हैं।
    • एनकोडर्स के साथ सुरक्षा टाइप करें विवादास्पद है।