मैं अपने Ubuntu VM में Hadoop-MapReduce जॉब चला रहा हूं। एक मध्यवर्ती चरण में, मुझे Hbase डेटाबेस की जांच करने की आवश्यकता है यदि कुछ स्ट्रिंग सरणी वहां मौजूद है, यदि नहीं मिली तो कुछ भी न करें और "NullPointerException" को फेंके बिना, अगले काम पर "जारी रखें"।

स्कैला कोड (संस्करण 2.11.7) नीचे दिया गया स्निपेट जांचता है कि क्या एक पंक्ति (यानी स्ट्रिंग सरणी) Hbase डेटाबेस में मौजूद है जो पहले MapReduce जॉब से बनाई गई थी। उसके लिए, यह पहले पंक्ति नाम इनपुट के आधार पर hbase में उस पंक्ति को पढ़ने के लिए .readColocationStoreRow() का उपयोग करता है, फिर यदि मौजूद है तो इसे विभाजित करता है, और फिर .contains() का उपयोग करके यह जांचता है कि इस सरणी के कुछ हिस्सों (एक विभाजक द्वारा अलग #) वहाँ मौजूद है। संपूर्ण कार्य पुनरावृत्तीय रूप से चलाया जाता है।

समस्या यह है कि जब ऐसी कोई पंक्ति नहीं है (पंक्ति नाम इनपुट के आधार पर) hbase डेटाबेस में मौजूद है, तो मुझे .split() के लिए "NulPointerException" मिलता है, जो समझ में आता है। मेरा प्रश्न यह है कि इस "NulPointerException" को कैसे अनदेखा किया जाए और अगले कार्य को जारी रखा जाए?

यह एक साधारण समस्या है, लेकिन मैं स्कैला में नौसिखिया हूँ।

  hBaseUtil
   .readColocationStoreRow(rowName = rowName, size = k - 1)
   .split(externalSeperator)
   .contains(sortedInstance.mkString(internalSeprator))
0
Arif Masrur 22 अगस्त 2019, 18:30

1 उत्तर

सबसे बढ़िया उत्तर

जैसा कि टिप्पणियों में बताया गया है, उस हिस्से को लपेटें जो null वापस आ सकता है।

val row = Option(hBaseUtil.readColocationStoreRow(rowName = rowName, size = k - 1))
val rslt = row.map(_.split(externalSeperator)
                    .contains(sortedInstance.mkString(internalSeprator)))
              .getOrElse(false)
1
jwvh 22 अगस्त 2019, 15:52