2016-03-25 27 views
1

我有下面的代码来读取拼花数据数据帧如何从拼花地板创建数据集?

DataFrame addressDF = sqlContext.read().parquet(addressParquetPath); 

如何从地板到数据集读取数据?

Dataset dataset = sqlContext.createDataset(sqlContext.read().parquet(propertyParquetPath).toJavaRDD(), Encoder.); 

Encoder参数应该包含什么?另外,我是否必须创建一个属性类,然后通过它或如何?

回答

0

对于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() {...} 
} 

现在,UniversityJava 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>

相关问题