Eu tenho anos de experiência em Java 8 e suas lambda. Mas eu conheci um louco problema quando eu desenvolvi um olá mundo, do tamanho de programa Spark.
Aqui eu tenho uma classe Java, em que a anotação de Dados é de Lombok:
@Data
public class Person implements Serializable {
private String name;
private Long age;
}
E aí, eu fiz um java lista contendo os objetos de Persion
classe:
Person p1 = new Person("sb", 1L);
Person p2 = new Person("sth", null);
List<Person> list = new ArrayList<>(2);
list.add(p1);
list.add(p2);
tão bom tão longe. E, então, eu tentei gerar uma Faísca conjunto de dados usando a lista:
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
Observe que, o bloco 1 é equivalente ao bloco 2, em java, e o bloco 2 é simplificado do bloco 1 por IntelliJ IDEA. A única diferença é o bloco 2 está usando expressão lambda.
No entanto, quando eu executar o programa, bloco 1 termina bem, enquanto bloco 2 executada na exceção de:
O que a " grande terra e big universo? Por que a JVM ou de Ignição de um motor de coisas como essa?!
System.out
?E eu substituí-lo com o Registo de quadro e bang! É bem sucedido.ForeachFunction<String> functionBody = log::info;