apache spark - run - Cambio de propiedad nulable de la columna Spark Dataframe
spark docs (1)
No hay una manera "clara" de hacer esto. Puedes usar el truco como aquí
Código relevante de esa respuesta:
def setNullableStateOfColumn( df: DataFrame, cn: String, nullable: Boolean) : DataFrame = {
// get schema
val schema = df.schema
// modify [[StructField] with name `cn`
val newSchema = StructType(schema.map {
case StructField( c, t, _, m) if c.equals(cn) => StructField( c, t, nullable = nullable, m)
case y: StructField => y
})
// apply new schema
df.sqlContext.createDataFrame( df.rdd, newSchema )
}
Copiaría DataFrame y copiaría el esquema, pero con specyfying nuloble programáticamente
Versión para muchas columnas:
def setNullableStateOfColumn(df: DataFrame, nullValues: Map[String, Boolean]) : DataFrame = {
// get schema
val schema = df.schema
// modify [[StructField]s with name `cn`
val newSchema = StructType(schema.map {
case StructField( c, t, _, m) if nullValues.contains(c) => StructField( c, t, nullable = nullValues.get(c), m)
case y: StructField => y
})
// apply new schema
df.sqlContext.createDataFrame( df.rdd, newSchema )
}
Uso: setNullableStateOfColumn (df1, Map ("col1" -> true, "col2" -> verdadero, "col7" -> falso));
Quiero cambiar la propiedad que se puede anular de una columna en particular en un Spark Dataframe.
Si imprimo el esquema del marco de datos actualmente, se ve a continuación. col1: string (nullable = false) col2: string (nullable = true) col3: string (nullable = false) col4: float (nullable = true)
Solo quiero que se actualice la propiedad de null col3. col1: string (nullable = false) col2: string (nullable = true) col3: string (nullable = true) col4: float (nullable = true)
Revisé en línea aquí hay algunos enlaces, pero parece que lo están haciendo para todas las columnas pero no para una columna específica. Cambiar la propiedad anulable de la columna en el marco de datos de la chispa. ¿Puede alguien ayudarme en este sentido?