Нет родительского селектора; так же, как нет предыдущего селектора. Одна из веских причин не иметь этих селекторов заключается в том, что браузер должен пройти через всех дочерних элементов элемента, чтобы определить, следует ли применять класс. Например, если вы написали:
body:contains-selector(a.active) { background: red; }
Затем браузеру придется подождать, пока он не загрузится, и все разобрались до
, чтобы определить, должна ли страница быть красной или нет.
Эта статья Почему у нас нет родительского селектора , это подробно объясняет.
При создании 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 .
Вы также можете очень быстро изменить схему данных. что-то вроде этого выполнит эту работу -
def setNullableStateForAllColumns( df: DataFrame, columnMap: Map[String, Boolean]) : DataFrame = {
import org.apache.spark.sql.types.{StructField, StructType}
// get schema
val schema = df.schema
val newSchema = StructType(schema.map {
case StructField( c, d, n, m) =>
StructField( c, d, columnMap.getOrElse(c, default = n), m)
})
// apply new schema
df.sqlContext.createDataFrame( df.rdd, newSchema )
}