Dataframe 如何在数据帧选择中添加中间列?

Dataframe 如何在数据帧选择中添加中间列?,dataframe,apache-spark,Dataframe,Apache Spark,将Spark 2.2与Spark shell一起使用,并尝试使用toDF和toDS case class Person(name: String, age: Long) val df = Seq( Person("Michael", 0), Person("Andy", 30), Person("Justin", 19) ).toDS() 这很好: df.select("age", "name").show df.select("age", "name").withColumn("foo",l

将Spark 2.2与Spark shell一起使用,并尝试使用
toDF
toDS

case class Person(name: String, age: Long)
val df = Seq( Person("Michael", 0), Person("Andy", 30), Person("Justin", 19) ).toDS()
这很好:

df.select("age", "name").show
df.select("age", "name").withColumn("foo",lit("-")).show
但使用不起作用:

df.select( "age", lit("-").as("foo"), "name" ).show
如何使用列函数或列常量


我需要更改列的顺序并添加一些中间列。

使用示例并假设spark shell上下文,此查询解决了以下问题:

        df.withColumn("foo",lit("-")). select("name","foo","age") 

您可以使用列进行操作,然后选择以获得正确的结果order@firsni,是的,看起来很优雅的解决方案(!),你可以发布为答案。。。或者我可以删除这个“虚拟”问题我的spark shell上的一些错误。“错误:未找到:值名称”,必须使用
选择(“名称”)
而不是
选择(名称)
。“无法解析给定输入列的'
foo
”,必须使用
withColumn(“foo”,lit(“-”)
而不是
withColumn(“age”,lit(“-”)。as(“foo”))
。解决方案是
df.withColumn(“foo”,lit(“-”)。选择(“姓名”、“foo”、“年龄”)
Ok,因为我使用手机。我不知道你要的是什么。谢谢