При создании Dataset
из статически типизированной структуры (без зависимости от аргумента schema
) Spark использует относительно простой набор правил для определения свойства nullable
.
null
. Option[_]
, тогда его DataFrame
представляет nullable
с None
SQL NULL
. nullable
. Поскольку Scala String
- java.lang.String
, что может быть null
, сгенерированный столбец может nullable
. По той же причине столбец bar
- nullable
в исходном наборе данных:
val data1 = Seq[(Int, String)]((2, "A"), (2, "B"), (1, "C"))
val df1 = data1.toDF("foo", "bar")
df1.schema("bar").nullable
Boolean = true
, но foo
не (scala.Int
не может быть null
).
df1.schema("foo").nullable
Boolean = false
Если мы изменим определение данных на:
val data2 = Seq[(Integer, String)]((2, "A"), (2, "B"), (1, "C"))
foo
будет nullable
(Integer
есть java.lang.Integer
, а целое число в блоке может быть null
):
data2.toDF("foo", "bar").schema("foo").nullable
Boolean = true
См. также: SPARK-20668 Измените ScalaUDF, чтобы обрабатывать значение nullability .