apache-spark - read - spark sql functions



Änderung der Spark-Dataframe-Spaltennullwert-Eigenschaft (1)

Es gibt keinen "klaren" Weg, dies zu tun. Sie können Trick wie hier verwenden

Relevanter Code aus dieser Antwort:

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 )
}

Es würde DataFrame kopieren und das Schema kopieren, aber programmgesteuert nur mit NULL-Werten

Version für viele Spalten:

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 )
}

Verwendung: setNullableStateOfColumn (df1, Map ("col1" -> true, "col2" -> true, "col7" -> false));

Ich möchte die Nullable-Eigenschaft einer bestimmten Spalte in einem Spark-Dataframe ändern.

Wenn ich das Schema des Datenrahmens drucke, sieht es unten aus. col1: string (nullable = false) col2: string (nullable = true) col3: string (nullable = false) col4: float (nullable = true)

Ich möchte nur col3 Nullable Eigenschaft aktualisiert werden. col1: string (nullable = false) col2: string (nullable = true) col3: string (nullable = true) col4: float (nullable = true)

Ich habe hier online einige Links überprüft, aber es scheint, als würden sie es für alle Spalten tun, aber nicht für eine bestimmte Spalte. Änderung der Nullwert-Eigenschaft der Spalte in Spark Dataframe Kann mir bitte jemand in dieser Hinsicht helfen.





apache-spark-sql