如何动态创建要包含在select中的列的列表



我试图用这种方式"生成"一个spark查询

  def stdizedOperationmode(sqLContext: SQLContext,withrul: DataFrame): DataFrame = {
    // see http://spark.apache.org/docs/latest/sql-programming-guide.html
    import sqLContext.implicits._
    val AZ: Column  = lit(0.00000001)
    def opMode(id:Int): Column = {
      (column("s"+id) - coalesce(column("a"+id) / column("sd"+id), column("a"+id) / lit(AZ))).as("std"+id)
    }
    // add the 21 std<i> columns based on s<i> - (a<id>/sd<id>)
    val columns: IndexedSeq[Column] = 1 to 21 map(id => opMode(id))
    val withStd = withrul.select(columns:_*)
    withStd
  }

问我如何添加"所有其他列"(*)想法:类似withrul.select('* :+ columns:_*) 的东西

您可以尝试以下操作:

// add the 21 std<i> columns based on s<i> - (a<id>/sd<id>)
val columns: IndexedSeq[Column] = 1 to 21 map(id => opMode(id))
val selectAll: Array[Column] = (for {
  i <- withrul.columns
} yield withrul(i)) union columns.toSeq
val withStd = withrul.select(selectAll :_*)

第二行将从中生成所有列,并将它们与列相加作为Seq[column]

您没有义务创建一个值,然后返回,可以用替换最后2行

withrul.select(selectAll : _*)

相关内容

  • 没有找到相关文章

最新更新