spark run org locally examples example docs apache-spark apache-spark-sql

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?