如何在由案例列表 类 组成的数据集中表示空值
How to represent nulls in DataSets consisting of list of case classes
我有案例class
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
)
我想用作 Dataset[FieldStateData] 类型的数据集的一部分,最终插入到数据库中。所有列都必须可以为空。我将如何表示从 Any 而不是任何字符串派生的数字的空类型?我考虑过使用 Option[Boolean] 或类似的东西,但它会在插入期间或用作 sql 查询时自动拆箱吗?
另请注意,以上代码不正确。布尔类型不可为空。这只是一个例子。
在案例 class 中,您使用 Option Monad 是正确的。该字段应在读取时由 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)
是存在的值。
我有案例class
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
)
我想用作 Dataset[FieldStateData] 类型的数据集的一部分,最终插入到数据库中。所有列都必须可以为空。我将如何表示从 Any 而不是任何字符串派生的数字的空类型?我考虑过使用 Option[Boolean] 或类似的东西,但它会在插入期间或用作 sql 查询时自动拆箱吗?
另请注意,以上代码不正确。布尔类型不可为空。这只是一个例子。
在案例 class 中,您使用 Option Monad 是正确的。该字段应在读取时由 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)
是存在的值。