Spark-忽略Dataset.as [SomeCaseClass]不存在的列

问题描述

Spark Dataset.as函数对未找到的列引发异常-org.apache.spark.sql.AnalysisException: cannot resolve 'attr_3' given input columns: [attr_1,attr_2];

case class SomeCaseClass(attr_1: String,attr_2: Long,attr_3: String)

spark.read.parquet("some_directory").as[SomeCaseClass]

有什么办法可以避免这种异常,并为不存在的列设置null?

解决方法

在读取时指定 schema ,因为架构会为不存在的列添加空值,然后转换为 DataSet

Example:

case class SomeCaseClass(attr_1: String,attr_2: Long,attr_3: String)

val sch=Seq[SomeCaseClass]().toDF.schema

spark.read.schema(SomeCaseClass).parquet("some_directory").as[SomeCaseClass]