Scala 如何在空的Spark数据帧中添加特殊情况行?

Scala 如何在空的Spark数据帧中添加特殊情况行?,scala,dataframe,apache-spark,null,Scala,Dataframe,Apache Spark,Null,我想创建一个DataFrame,该DataFrame只包含一行,该行基于列的类型(StringType、IntegerType等)具有默认值。大概是这样的: // +----+----+ // |col1|col2| // +----+----+ // | -1| n/a| // +----+----+ 我怎么做 或者,我认为只有一行空值就足够了,然后我可以应用我编写的以下函数: def addNaRow(df: DataFrame): DataFrame = { val empty

我想创建一个DataFrame,该DataFrame只包含一行,该行基于列的类型(StringType、IntegerType等)具有默认值。大概是这样的:

// +----+----+
// |col1|col2|
// +----+----+
// |  -1| n/a|
// +----+----+
我怎么做

或者,我认为只有一行空值就足够了,然后我可以应用我编写的以下函数:

def addNaRow(df: DataFrame): DataFrame = {
    val emptyDf = spark.createDataFrame(sc.emptyRDD[Row], df.schema)
    val rowDf = df.schema.foldLeft(df)
    { (accDf, col) =>
      col.dataType match {
        case IntegerType =>
          accDf.withColumn(col.name, lit(-1))
        case StringType =>
          accDf.withColumn(col.name, lit("n/a"))
          // TODO add cases with other types
      }
    }
    rowDf.union(df)
  }
您可以这样做:

def addNaRow(df: DataFrame, spark: SparkSession): DataFrame = {
    val df1 = spark.range(1).select(df.schema.map(s => s.dataType match {
       case IntegerType => lit(-1).alias(s.name)
       case StringType => lit("n/a").alias(s.name)
    }):_*)

    df.union(df1)
}