我拥有多年经验的Java8和lambda。 但我遇到一个疯狂的问题时,我制定了一个你好世界大小的火花的程序。
在这里我有一个Java类,其中的数据注释是从龙目:
@Data
public class Person implements Serializable {
private String name;
private Long age;
}
然后我建立了一个java列表,其中包含的对象 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的简化从方框1IDEA. 唯一的区别是,框2是使用氧表达。
然而,当我执行的程序,方框1结束的同时,方框2中运行的情况例外:
什么...大地球和大宇宙? 为什么JVM或火花引擎不会像这样的事情?!
System.out
?和我换日志框架和砰! 它成功。ForeachFunction<String> functionBody = log::info;