Mam wieloletnie doświadczenie w pracy z Java 8 i jej lâmbdoj. Ale mam do czynienia z szalonym problemem, gdy opracował program Spark wielkości hello world.
Tutaj mam klasę Java, w którym adnotacje danych pochodzą z Ломбока:
@Data
public class Person implements Serializable {
private String name;
private Long age;
}
A następnie stworzyłem listę oprogramowania java, która zawiera obiekty Persion
klasa:
Person p1 = new Person("sb", 1L);
Person p2 = new Person("sth", null);
List<Person> list = new ArrayList<>(2);
list.add(p1);
list.add(p2);
jak na razie wszystko idzie dobrze. A następnie próbowałem utworzyć zestaw danych Spark, za pomocą listy:
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
Należy zwrócić uwagę, że blok 1 odpowiada bloku 2 w java, a blok 2 uproszczone w porównaniu z jednostką 1 za pomocą IntelliJ IDEA. Jedyna różnica polega na tym, że w bloku 2 stosuje się wyrażenie lambda.
Jednak, gdy mam do wykonania program, blok 1 kończy się dobrze, podczas gdy blok 2 jest w wyjątku:
Co za... duża ziemia i wielki jest wszechświat? Dlaczego JVM lub silnik Spark robią takie rzeczy?!
System.out
?I zastępuję go ramką dziennika i bam! To udało.ForeachFunction<String> functionBody = log::info;