如何从镶木地板创建数据集?

时间:2016-03-25 20:51:11

标签: dataset apache-spark-sql

我有以下代码从镶木地板读取数据到Dataframe

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

如何从拼花地板读取数据到DATA SET?

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

Encoder参数应包含哪些内容?此外,我是否必须创建一个属性类,然后传递它或它是如何的?

1 个答案:

答案 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() {...}
}

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