我有以下代码将数据从镶木地板读取到Dataframe
DataFrame addressDF = sqlContext.read().parquet(addressParquetPath);
如何将数据从镶木地板读取到数据集?
Dataset dataset = sqlContext.createDataset(sqlContext.read().parquet(propertyParquetPath).toJavaRDD(), Encoder.);
Encoder参数应该包含什么?另外,我必须创建一个属性类然后传递它吗?
类型T
的编码器是告诉Spark如何从内部Spark表示对T
的实例进行解码和~编码的类。它包含类的模式和用于通过反射创建类的scala ClassTag。
在您的代码中,您没有将数据集专门化为任何类型的t,所以我不能为您创建编码器,但我可以举一个Databricks Spark文档中的例子,我建议您阅读它,因为它很棒。首先,让我们创建要加载到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,Spark Encoders
库提供了一种为Java Bean创建编码器的方法,其函数为Bean:
Encoder<University> universityEncoder = Encoders.bean(University.class)
然后可以用于从镶木地板读取University
的数据集,而无需首先将其加载到DataFrame(这是冗余的):
Dataset<University> schools = context.read().json("/schools.json").as(universityEncoder);
并且现在CCD_ 7是从拼花地板文件读取的CCD_。