Scala 如何在空的Spark数据帧中添加特殊情况行?
我想创建一个DataFrame,该DataFrame只包含一行,该行基于列的类型(StringType、IntegerType等)具有默认值。大概是这样的: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
// +----+----+
// |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)
}