我有一个案例类
final case class FieldStateData(
job_id: String = null,
job_base_step_id: String = null,
field_id: String = null,
data_id: String = null,
data_value: String = null,
executed_unit: String = null,
is_doc: Boolean = null,
mime_type: String = null,
filename: String = null,
filesize: BigInt = null,
caption: String = null,
executor_id: String = null,
executor_name: String = null,
executor_email: String = null,
created_at: BigInt = null
)
我想用作类型数据集[fieldStatedAta]数据集的一部分,以最终将其插入数据库。所有列都需要无效。我将如何代表从任何而不是任何字符串的数字代表零类型?我考虑过使用选项[boolean]或类似的东西,但是在插入过程中或用作SQL查询时,它会自动取消盒子?
?还请注意,以上代码不正确。布尔类型并非无效。这只是一个例子。
您在案例类中使用 option monad是正确的。该字段应在READ上被Spark未包装。
import org.apache.spark.sql.{Encoder, Encoders, Dataset}
final case class FieldStateData(job_id: Option[String],
job_base_step_id: Option[String],
field_id: Option[String],
data_id: Option[String],
data_value: Option[String],
executed_unit: Option[String],
is_doc: Option[Boolean],
mime_type: Option[String],
filename: Option[String],
filesize: Option[BigInt],
caption: Option[String],
executor_id: Option[String],
executor_name: Option[String],
executor_email: Option[String],
created_at: Option[BigInt])
implicit val fieldCodec: Encoder[FieldStateData] = Encoders.product[FieldStateData]
val ds: Dataset[FieldStateEncoder] = spark.read.source_name.as[FieldStateData]
当您将Dataset
写回数据库时,None
成为 null 值和Some(x)
是存在的值。