मैं स्पार्क स्ट्रीमिंग का उपयोग कर जेएमएस कतार (क्यूपीआईडी) पर प्राप्त कुछ एक्सएमएल डेटा को संसाधित करने की कोशिश कर रहा हूं। एक्सएमएल को डीस्ट्रीम के रूप में प्राप्त करने के बाद मैं उन्हें डेटाफ्रेम में परिवर्तित कर देता हूं ताकि मैं पहले से लोड किए गए डेटाफ्रेम के रूप में उनके कुछ स्थिर डेटा के साथ उनसे जुड़ सकूं। लेकिन डीस्ट्रीम पर फोरैच Rdd विधि के लिए एपीआई दस्तावेज के अनुसार: इसे ड्राइवर पर निष्पादित किया जाता है, तो इसका मतलब यह है कि सभी प्रसंस्करण तर्क केवल चालक पर चलेंगे और श्रमिक/निष्पादकों को वितरित नहीं होंगे।चालक पर निष्पादित किया गया foreachRDD है?
API दस्तावेज़
foreachRDD(func)
एक समारोह लागू होता है, समारोह, प्रत्येक RDD के लिए धारा से उत्पन्न है कि सबसे सामान्य उत्पादन ऑपरेटर। यह फ़ंक्शन प्रत्येक आरडीडी में बाहरी सिस्टम में डेटा को धक्का देना चाहिए, जैसे फ़ाइलों को आरडीडी सहेजना, या नेटवर्क पर इसे नेटवर्क पर लिखना। नोट कि फंक्शन func स्ट्रीमिंग अनुप्रयोग चलाने वाले ड्राइवर प्रक्रिया में निष्पादित किया गया है, और आमतौर पर इसमें RDD क्रियाएं होंगी जो स्ट्रीमिंग आरडीडी की गणना को मजबूर करेगी।
खैर, यह तो भ्रामक है , "नहीं, यह फ़ंक्शन स्वयं चालक पर चलता है, लेकिन यह न भूलें कि यह आरडीडी पर चल रहा है", मान लें कि 'rdd.foreachRDD (func)' कहा जाता है, और यह 'func' फ़ंक्शन डेटा को रेडिस के माध्यम से लिखता है वैश्विक var 'redis_client', जिसका अर्थ है 'func'' redis_client' को संदर्भित करता है, इसलिए प्रश्न है: 'foreachRDD' कॉल में कोई अपवाद उठाया जाएगा, क्योंकि' redis_client' serializable नहीं है। – avocado
@loganecolss मैं सहमत हूं, निष्पादन के अर्थशास्त्र जटिल हैं। 'rdd.foreachRDD' निष्पादकों पर 'func' निष्पादित करता है। यदि बंद करने के माध्यम से 'func' * कैप्चर *' redis_client' कैप्चर करता है, तो आपको 'टास्कनॉटसेरियलज़ेबल' अपवाद मिलेगा। यदि 'func_client' का उदाहरण 'func' के अंदर आवंटित किया गया है, तो आप ठीक होंगे। –
@YuvalItzchakov आपकी टिप्पणी का उद्धरण: _rdd.foreachRDD निष्पादकों पर func निष्पादित करता है ._ [डॉक्स] से [https://spark.apache.org/docs/latest/streaming-programming-guide.html#output- ऑपरेशंस-ऑन-डीस्ट्रीम), 'foreachRDD' ** चालक ** पर 'func' निष्पादित करता है। 'foreach',' foreachPartition' ** निष्पादक ** पर चलता है हालांकि। –