2015-08-26 5 views
5

जैसे स्पार्क आरडीडी का इलाज करें मेरे पास JSON को बदलने के लिए एक सीएलआई एप्लिकेशन है। इसका अधिकांश कोड map पिंग, flatMap पिंग और for JValues ​​की सूची के साथ ट्रैवर्सिंग है। अब मैं इस एप्लिकेशन को स्पार्क पर पोर्ट करना चाहता हूं, लेकिन मुझे लगता है कि मुझे सभी कार्यों को 1: 1 को फिर से लिखना होगा, लेकिन के बजाय RDD[JValue] लिखें।सार्क सेक

क्या लिस्ट और आरडीडी दोनों को स्वीकार करने के लिए फ़ंक्शन के लिए कोई तरीका (जैसे प्रकार वर्ग) है।

+2

सूची और आरडीडी पर मानचित्र का विधि हस्ताक्षर समान नहीं है, इसलिए यह दर्द होगा। आप एक टाइपक्लास दृष्टिकोण के साथ जा सकते हैं और अपने मानचित्र के लिए अपना स्वयं का रैपर परिभाषित कर सकते हैं, दोनों के लिए एक उदाहरण प्रदान कर सकते हैं। यदि आप आरडीडी के लिए स्कालाज़ मोनैड और ट्रैवर्स इंस्टेंस को परिभाषित कर सकते हैं तो आप इसका उपयोग कर सकते हैं। – Daenyth

+0

मुझे लगता है कि मज़ेदार के साथ समस्या नहीं होनी चाहिए। लेकिन पहली नज़र में आरडीडी मोनाद कानून नहीं रखता है। – chuwy

+1

यदि आरडीडी मोनैड कानूनों का पालन नहीं करता है तो आप स्कालज़ टाइपक्लास के साथ फ्लैटमैप नहीं कर पाएंगे। उस ने कहा कि आप ऐसे संस्करण को लागू करने में सक्षम हो सकते हैं जो कानूनों का पालन नहीं करता है और यह आपकी विशिष्ट आवश्यकताओं के लिए * काम * कर सकता है। ValidationFlatMap – Daenyth

उत्तर

2

आप स्थानीय & सार कोड आप अपने lambdas स्थानांतरित कर सकते हैं/anaonymous कार्यों कि तुम नामित कार्यों में map/flatMap करने के लिए गुजरती हैं और फिर से उपयोग के लिए उन्हें प्रसंस्करण के लिए अपने कोड साझा करना चाहते हैं।

आप कैसे जो केवल साझा कार्य करता है एक कस्टम विशेषता के नक्शे/flatMaps/एक अंतर्निहित दोनों RDD और Seq के बीच रूपांतरण आदि, आप भी बना सकते हैं ऑर्डर करने के लिए अपने तर्क का फिर से उपयोग करना चाहते हैं लेकिन अंतर्निहित रूपांतरण कर सकते हैं काफी भ्रमित हो गया और मुझे सच में नहीं लगता कि यह एक अच्छा विचार है (लेकिन आप कर सकते हैं अगर आप मुझसे असहमत हैं :))।

+0

मुझे लगता है कि रूपांतरणों को वास्तव में कार्यों को शामिल करने की आवश्यकता है, इसलिए आरडीडी की गणना की जाएगी। – chuwy

+0

वास्तव में, आपको कुछ सामान्य कार्य करने के लिए अपने सामान्य लक्षण में भी एक कार्रवाई करनी होगी। मुझे सच में लगता है कि ऐसा करने का सही तरीका नक्शा/flatMap/etc के अंदर साझा तर्क को फैक्टर करके आपके लिए काम करता है। – Holden

+0

धन्यवाद। अगर मैं कुछ और उचित नहीं पा रहा तो शायद यह मेरी पसंद होगी। समस्या यह है कि लैम्ब्डा-फ़ंक्शंस अब बड़े लोगों में संयुक्त हो गए हैं, इसलिए फ़ैक्टरिंग आउट थोड़ा सा होगा। मैं 'या तो' के उपयोग के बारे में भी सोचता हूं। – chuwy

संबंधित मुद्दे