ฉันต้องปีประสบการณ์ของจาวา 8 และมัน lambda. แต่ฉันเจอบ้านปัญหาตอนที่ฉันพัฒนาเป็นหวัดดี-โลกขนาดจุโปรแกรม
ตอนนี้ฉันมีงานจาวาองเรียนซึ่งข้อมูลหมายเหตุประกอบ annotation tool มาจาก 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 ประยุกต์@item text character set จากบล็อก 1 โดย IntelliJ รู้หรอก ความแตกต่างเพียงอย่างเดียวคือบล็อค 2 ใช้ lambda การแสดงออก
อย่างไรก็ตามเมื่อฉันประมวลผลโปรแกรมบล็อก 1 จบลงงั้นตอนบล็อค 2 อยู่ยกเว้น:
อะไร?อ้าวว่าไงเพื่อนใหญ่บนโลกและใหญ่กจักรวาลใช่ไหม? ทำไม JVM ออลสปาร์คหรือเครื่องยนต์ทำแบบนี้?!
System.out
?และฉันแทนมันด้ปูมบันทึกเฟรมเวิร์กและปัง! มันสำเร็จForeachFunction<String> functionBody = log::info;