scala - 如何在缺少名称时将新列添加到 DataFrame 中?

标签 scala apache-spark dataframe apache-spark-sql

我想将选定的列添加到尚不可用的 DataFrame。

val columns=List("Col1","Col2","Col3") 
for(i<-columns) 
 if(!df.schema.fieldNames.contains(i)==true)
 df.withColumn(i,lit(0))

When select column the data frame only old column are coming, new columns are not coming.

最佳答案

它更多地是关于如何在 Scala 中做到这一点而不是 Spark 并且是 foldLeft 的绝佳案例。 (我最喜欢的!)

// start with an empty DataFrame, but could be anything
val df = spark.emptyDataFrame
val columns = Seq("Col1", "Col2", "Col3")
val columnsAdded = columns.foldLeft(df) { case (d, c) =>
  if (d.columns.contains(c)) {
    // column exists; skip it
    d
  } else {
    // column is not available so add it
    d.withColumn(c, lit(0))
  }
}

scala> columnsAdded.printSchema
root
 |-- Col1: integer (nullable = false)
 |-- Col2: integer (nullable = false)
 |-- Col3: integer (nullable = false)

关于scala - 如何在缺少名称时将新列添加到 DataFrame 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43468515/

相关文章:

scala - Spark Dataframe Group 通过新的指标列

scala - 工作人员是否还需要为Spark安装Hadoop?

python - Pandas:查看项目是否在数据框中的 Series.series 列表中

如果行数为奇数,则从数据框中删除随机行

带有if语句的python数据框 bool 值

scala - 如何在scala中实现惰性序列(可迭代)?

scala - 通过索引选择 TreeMap 的键

scala - 如何从 HDFS 获取目录名称

scala - 将 Scala Dataframe 写入 CSV 文件时应用 UTF8 编码

java - 构建 sbt 项目作为 Maven 项目的一部分