Как узнать, какая часть кода выполняется, когда в VSCode запускается команда расширения?

При создании 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 .

0
задан Yohei 28 March 2019 в 04:04
поделиться