2016-10-26 6 views
5

मेरे पास एक जावा एप्लिकेशन है जिसे मैंने स्पार्क स्ट्रीमिंग नौकरी के रूप में लिखा है जिसके लिए कुछ संसाधन संसाधनों की आवश्यकता है जिन्हें मैंने संसाधन निर्देशिका में जार में शामिल किया है (डिफ़ॉल्ट मेवेन निर्देशिका का उपयोग करना संरचना)। यूनिट परीक्षणों के साथ मुझे इन फ़ाइलों तक पहुंचने में कोई समस्या नहीं है, लेकिन जब मैं स्पार्क-सबमिट के साथ अपना प्रोग्राम चलाता हूं तो मुझे FileNotFoundException मिलता है। स्पार्क-सबमिट के साथ चलते समय मैं अपने जार में क्लासपाथ पर फ़ाइलों का उपयोग कैसे करूं?अपाचे स्पार्क स्ट्रीमिंग संदर्भ से JAR में संसाधन निर्देशिका में फ़ाइलों तक पहुंच

कोड मैं वर्तमान में मेरे फ़ाइल तक पहुँचने का उपयोग कर रहा हूँ इस तरह मोटे तौर पर दिखता है:

InputStream input; 

    try { 
     URL url = this.getClass().getClassLoader().getResource("my file"); 
     if (url == null) { 
      throw new IOException("file does not exist"); 
     } 
     String path = url.getPath(); 
     input = new FileInputStream(path); 
    } catch(IOException e) { 
     throw new RuntimeException(e); 
    } 

धन्यवाद।

नोट यह Reading a resource file from within jar (जिसे सुझाया गया था) का डुप्लिकेट नहीं है, क्योंकि यह कोड स्थानीय रूप से चलाने पर काम करता है। स्पार्क क्लस्टर में चलने पर यह केवल विफल रहता है।

+0

इस स्पार्क से संबंधित नहीं है या स्ट्रीमिंग, यह सादा जावा कोड है। – Shankar

+1

http://stackoverflow.com/questions/20389255/reading-a-resource-file-from-within-jar – Shankar

+0

संख्या का संभावित डुप्लिकेट सामान्य रूप से चलाए जाने पर उपर्युक्त कार्य करता है। स्पार्क-सबमिट के साथ चलाने पर यह असफल हो जाता है। इसलिए, स्पार्क सवाल। – Peter

उत्तर

2

मैं संसाधन निर्देशिका एक अलग (और काफी कम मूर्ख) रास्ते तक पहुंच कर इस तय:

input = MyClass.class.getResourceAsStream("/my file"); 
+0

मेरे पास एक ही समस्या है। सेटिंग क्लास कहां से है और आपने फ़ाइल पथ को कैसे निकाला है (स्पार्ककॉन्टेक्स्ट की नईAPIHadoopFile बनाने के लिए भेजा जाना है)? – user1384205

+0

आह, मुझे और स्पष्ट होना चाहिए था। सेटिंग्स केवल वह वर्ग है जिसका मैं उपयोग कर रहा था। कोड को लिखने वाले किसी भी वर्ग के साथ इसे बदलें। इसे और स्पष्ट करने के लिए उत्तर संपादित करें। – Peter

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