我有以下代码从镶木地板读取数据到Dataframe
DataFrame addressDF = sqlContext.read().parquet(addressParquetPath);
如何从拼花地板读取数据到DATA SET?
Dataset dataset = sqlContext.createDataset(sqlContext.read().parquet(propertyParquetPath).toJavaRDD(), Encoder.);
Encoder参数应包含哪些内容?此外,我是否必须创建一个属性类,然后传递它或它是如何的?
答案 0 :(得分:0)
类型T
的{{3}}是告诉Spark如何从内部Spark表示解码和编码T
的实例的类。它包含类的模式和scala Encoder,用于通过反射创建类。
在您的代码中,您没有专门针对任何类型T的数据集,所以我无法为您创建一个编码器,但我可以举例来自ClassTag的一个,我建议您阅读,因为它是大。
首先,让我们创建我们想要加载到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
是Databricks Spark documentation,Spark Encoders
库提供了一种使用函数Java Bean为Java Bean创建编码器的方法:
Encoder<University> universityEncoder = Encoders.bean(University.class)
然后可以用来从镶木地板中读取University
的数据集,而无需先将它们加载到DataFrame中(这是多余的):
Dataset<University> schools = context.read().json("/schools.json").as(universityEncoder);
现在schools
是从拼花文件中读取的Dataset<University>
。