2

讓我們假設我創建了一個木文件,如下所示:讀實木複合地板成火花集忽略缺少的字段

case class A (i:Int,j:Double,s:String) 

var l1 = List(A(1,2.0,"s1"),A(2,3.0,"S2")) 

val ds = spark.createDataset(l1) 
ds.write.parquet("/tmp/test.parquet") 

是否有可能將其與不同的模式,其中唯一的區別是讀入一個類型的數據集幾個額外的領域?

如:

case class B (i:Int,j:Double,s:String,d:Double=1.0) // d is extra and has a default value 

有沒有辦法,我可以使這項工作? :

val ds2 = spark.read.parquet("/tmp/test.parquet").as[B] 

回答

1

火花,如果數據集的架構不匹配所需U類型,可以使用select隨着alias或重新安排或重新命名要求。這意味着對於下面的代碼工作:

val ds2 = spark.read.parquet("/tmp/test.parquet").as[B] 

以下修改需要做的事情:

val ds2 = spark.read.parquet("/tmp/test.parquet").withColumn("d", lit(1D)).as[B] 

或者,如果創建附加列是不可能的,那麼下面可以做:

val ds2 = spark.read.parquet("/tmp/test.parquet").map{ 
    case row => B(row.getInt(0), row.getDouble(1), row.getString(2)) 
} 
相關問題