gpt4 book ai didi

apache-spark - 将 parquet 读入 spark 数据集忽略缺失的字段

转载 作者:行者123 更新时间:2023-12-04 04:01:39 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Spark 2.0 implicit encoder, deal with missing column when type is Option[Seq[String]] (scala)

(1 个回答)


4年前关闭。




假设我创建了一个 Parquet 文件,如下所示:

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]

最佳答案

在 Spark 中,如果数据集的架构与所需的不匹配 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))
}

关于apache-spark - 将 parquet 读入 spark 数据集忽略缺失的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43570279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com