Как представить нули в DataSets, состоящие из списка классов дел - PullRequest
2 голосов
/ 07 мая 2019

У меня есть кейс класса

  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-запрос?

Также обратите внимание, что приведенный выше код неверен. Булевы типы не обнуляются. Это просто пример.

1 Ответ

2 голосов
/ 08 мая 2019

Вы правильно используете Опция Монада для в классе дела.Поле должно быть распаковано искрой при чтении.

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) являются значениямикоторые присутствуют.

...