मैं वर्षों के अनुभव के जावा 8 और अपने लैम्ब्डा. लेकिन मैं एक समस्या है जब मैं विकसित एक नमस्ते विश्व-आकार चिंगारी कार्यक्रम है ।
यहाँ मैं एक जावा वर्ग है, जो डेटा एनोटेशन से Lombok:
@Data
public class Person implements Serializable {
private String name;
private Long age;
}
और फिर मैं बनाया एक जावा सूची की वस्तुओं से युक्त Persion
वर्ग:
Person p1 = new Person("sb", 1L);
Person p2 = new Person("sth", null);
List<Person> list = new ArrayList<>(2);
list.add(p1);
list.add(p2);
तो अच्छा है अब तक । और फिर मैं करने की कोशिश की एक चिंगारी उत्पन्न डेटासेट का उपयोग कर सूची:
SparkSession session = SparkSession.builder().master("local[1]").appName("SparkSqlApp").getOrCreate();
Encoder<Person> personEncoder = Encoders.bean(Person.class);
Dataset<Person> dataset1 = session.createDataset(list, personEncoder);
dataset1.foreach(new ForeachFunction<Person>() { // 1
@Override
public void call(Person person) throws Exception {
System.out.println(person);
}
});
dataset1.foreach((ForeachFunction<Person>) System.out::println); //2
है कि नोटिस, ब्लॉक 1 करने के लिए बराबर है 2 ब्लॉक में जावा और ब्लॉक 2 सरल है से ब्लॉक 1 से IntelliJ विचार है. फर्क सिर्फ इतना है 2 ब्लॉक का उपयोग कर रहा है लैम्ब्डा अभिव्यक्ति है ।
हालांकि, जब मैं कार्यक्रम पर अमल, 1 ब्लॉक अच्छी तरह से समाप्त होता है, जबकि ब्लॉक 2 में चलाने के लिए अपवाद:
क्या... बड़े पृथ्वी और ब्रह्मांड? क्यों जेवीएम या स्पार्क इंजन बातें करता है की तरह इस?!
System.out
?और मैं इसे बदलने के साथ लॉग ढांचे और चोदना! यह सफल रहा है ।ForeachFunction<String> functionBody = log::info;