对于T
类型的Encoder是告诉Spark如何从内部Spark表示中解码和编码T
实例的类。它包含类的模式和scala ClassTag,它用于通过反射来创建你的类。
在你的代码中,你没有专门研究任何类型T的数据集,所以我不能为你创建一个编码器,但我可以给你举例来自Databricks Spark documentation,我建议阅读它,因为它很棒。 首先,让我们来创建我们希望加载到一个DateSet类University
:
public class University implements Serializable {
private String name;
private long numStudents;
private long yearFounded;
public void setName(String name) {...}
public String getName() {...}
public void setNumStudents(long numStudents) {...}
public long getNumStudents() {...}
public void setYearFounded(long yearFounded) {...}
public long getYearFounded() {...}
}
现在,University
是Java Bean和火花Encoders
库提供了一种方法来创建Java组件编码器,功能bean :
Encoder<University> universityEncoder = Encoders.bean(University.class)
其然后可以被用于读取的University
从镶木一个数据集而不首先将它们载入一个数据帧(它是多余的):
Dataset<University> schools = context.read().json("/schools.json").as(universityEncoder);
现在schools
是从地板文件中读取的Dataset<University>
。