2016-03-05 20 views
5

मैं जावा को यह स्काला अभिव्यक्ति कन्वर्ट करने के लिए कोशिश कर रहा हूँ:जावा में कनवर्ट स्काला अभिव्यक्ति 1.8

val corpus: RDD[String] = sc.wholeTextFiles("docs/*.md").map(_._2) 

यह है कि मैं क्या जावा में है:

RDD<String> corpus = sc.wholeTextFiles("docs/*.md").map(a -> a._2); 

लेकिन मैं a._2 पर एक त्रुटि प्राप्त :।

package org.apache.spark.api.java.function; 

import java.io.Serializable; 

public interface Function<T1, R> extends Serializable { 
     R call(T1 var1) throws Exception; 
} 

उत्तर

5

स्काला PairRDD में एक टपल प्रकार है और आप _1 और _2 साथ अपने सदस्यों पहुँच सकते हैं:

Bad return type in lambda expression: String cannot be converted to R

अगर मैं "सुपर" विधि करने के लिए जाना है, यह मैं क्या देख रहा है। हालांकि जावा ने टुपल्स में नहीं बनाया है, इसलिए आपको इन सदस्यों को प्राप्त करने के तरीकों का उपयोग करना होगा। यह इस तरह दिखना चाहिए, क्योंकि जावा को हमेशा किसी भी फ़ंक्शन पर ब्रांड्स की आवश्यकता होती है।

JavaRDD<String> corpus = sc.wholeTextFiles("docs/*.md").map(a -> a._2()); 

संपादित करें: ऐसा लगता है कि स्काला में एक अंतर्निहित पैरामीटर map प्रक्रिया है जिसका अर्थ आप जावा में स्पष्ट रूप से इसे पारित करने के लिए पारित कर दिया है। स्कैला दस्तावेज़ों के लिए जावा डॉक और here के लिए here देखें।

संपादित करें 2: कुछ घंटों के झुकाव के बाद जवाब मिला, यह जावाआरडीडी होना था।

+0

मैं एक ही त्रुटि इस के साथ मिल रहा है ... "स्ट्रिंग को आर में परिवर्तित नहीं किया जा सकता है" – neuromouse

+0

अब यह अजीब बात है, 'टाइप प्रकार स्केल होगा। 2) स्ट्रिंग, स्ट्रिंग>। क्या आप जांच सकते हैं कि आपके मामले में किस प्रकार का है? –

+0

यह मुझे एक ही त्रुटि देता है: (Tuple2 <स्ट्रिंग, स्ट्रिंग> ए) -> a._2()। लेकिन अगर मैं स्ट्रिंग्स छोड़ देता हूं: (Tuple2 a) -> a._2() - मुझे एक और त्रुटि मिलती है: विधि मैप को हल नहीं कर सकता () – neuromouse

2

आप values() उपयोग करने के लिए परिणाम आप जावा यहाँ चाहते प्राप्त करने में सक्षम होना चाहिए:

JavaRDD<String> corpus = sc.wholeTextFiles("docs/*.md").values(); 

ध्यान दें कि प्रकार यहाँ JavaRDD नहीं RDD

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