Как создать / смоделировать кадр данных Spark Scala с классом дел, вложенным в верхний уровень?
root
|-- _id: long (nullable = true)
|-- continent: string (nullable = true)
|-- animalCaseClass: struct (nullable = true)
| |-- name: string (nullable = true)
| |-- gender: string (nullable = true)
В настоящее время я тестирую модуль, который выводит кадр данных в приведенной выше схеме.Чтобы проверить равенство, я использовал toDF (), который, к сожалению, дает схему с nullable = true для «_id» в фальсифицированном фрейме данных, что делает тест неудачным (обратите внимание, что «фактический» вывод из функции имеет nullable = true для всех).
Я также попытался создать поддельный фрейм данных другим способом, который привел к ошибкам: https://pastebin.com/WtxtgMJA
Вот что я попробовал в этом подходе:
import org.apache.spark.sql.Encoders
val animalSchema = Encoders.product[AnimalCaseClass].schema
val schema = List(
StructField("_id", LongType, true),
StructField("continent", StringType, true),
StructField("animalCaseClass", animalSchema, true)
)
val data = Seq(Row(12345L, "Asia", AnimalCaseClass("tiger", "male")), Row(12346L, "Asia", AnimalCaseClass("tigress", "female")))
val expected = spark.createDataFrame(
spark.sparkContext.parallelize(data),
StructType(schema)
)
Мне пришлось использовать этот подход, чтобы сделать обнуляемое значение true для тех полей, где toDF делает обнуляемое значение false по умолчанию.
Как я могу создать фрейм данных с той же схемой, что и выходные данные макетируемой функции, и объявить значения, которые также могут быть классом case?