Spark Dataframe列可空属性更改



我想更改Spark Dataframe中特定列的nullable属性。

如果我打印当前数据框架的模式,它看起来如下所示:

col1: string (nullable = false)
col2: string (nullable = true)
col3: string (nullable = false)
col4: float (nullable = true)

我只是想要col3 nullable属性更新。

col1: string (nullable = false)
col2: string (nullable = true)
col3: string (nullable = true)
col4: float (nullable = true)

我在网上查了一下,这里有一些链接,但似乎他们对所有列都这样做,而不是对特定的列,见改变spark数据框架中列的可空属性。有人能在这方面帮助我吗?

没有"明确"的方法来做到这一点。你可以使用像这样的技巧

答案的相关代码:

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

它将复制DataFrame和复制模式,但是以编程方式指定可空

多列版本:

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

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

相关内容

  • 没有找到相关文章

最新更新