簡體   English   中英

如何在空的Spark DataFrame中添加特殊情況的行?

[英]How to add a special-case row in a empty Spark DataFrame?

我想創建一個僅具有基於默認值(基於列的類型(StringType,IntegerType等))的行的DataFrame。 像這樣:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM