2016-03-25 73 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>

相關問題