Mám ročné skúsenosti s Java 8 a jeho lambda. Ale stretol som šialený problém, keď som vyvinul hello-world-veľkosť Iskra program.
Tu som si Java triedy, v ktorých sa Údaje anotácia z Lombok:
@Data
public class Person implements Serializable {
private String name;
private Long age;
}
A potom som sa postavil java zoznam obsahuje objekty Persion
trieda:
Person p1 = new Person("sb", 1L);
Person p2 = new Person("sth", null);
List<Person> list = new ArrayList<>(2);
list.add(p1);
list.add(p2);
tak dobre, tak ďaleko. A potom som sa snažil vytvoriť Iskra Dataset pomocou zoznamu:
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
Oznámenie, že bloku 1 je ekvivalentná blok 2 java a bloku 2 je zjednodušené z bloku 1 IntelliJ IDEA. Jediný rozdiel je v bloku 2 je pomocou lambda výraz.
Avšak, keď som sa spustite program, blok 1 končí dobre, zatiaľ čo blok 2 spustiť v výnimka:
Čo... veľké zemi a veľký vesmír? Prečo JVM alebo Iskra motora robí veci, ako je tento?!
System.out
?A ja som ho nahradiť Denník rámec a bang! To sa podarilo.ForeachFunction<String> functionBody = log::info;