Scala Spark with column正在修改列,但不添加新列

Scala Spark with column正在修改列,但不添加新列,scala,apache-spark,dataframe,Scala,Apache Spark,Dataframe,Scala 2.12和Spark 2.2.1。我有以下代码: myDf.show(5) myDf.withColumn("rank", myDf("rank") * 10) myDf.withColumn("lastRanOn", current_date()) println("And now:") myDf.show(5) 运行此操作时,我在日志中看到: +---------+-----------+----+ |fizz|buzz|rizzrankrid|rank| +---------

Scala 2.12和Spark 2.2.1。我有以下代码:

myDf.show(5)
myDf.withColumn("rank", myDf("rank") * 10)
myDf.withColumn("lastRanOn", current_date())
println("And now:")
myDf.show(5)
运行此操作时,我在日志中看到:

+---------+-----------+----+
|fizz|buzz|rizzrankrid|rank|
+---------+-----------+----+
|   2|   5| 1440370637| 128|
|   2|   5| 2114144780|1352|
|   2|   8|  199559784|3233|
|   2|   5| 1522258372| 895|
|   2|   9|  918480276| 882|
+---------+-----------+----+
And now:
+---------+-----------+-----+
|fizz|buzz|rizzrankrid| rank|
+---------+-----------+-----+
|   2|   5| 1440370637| 1280|
|   2|   5| 2114144780|13520|
|   2|   8|  199559784|32330|
|   2|   5| 1522258372| 8950|
|   2|   9|  918480276| 8820|
+---------+-----------+-----+
所以,有趣的是:

第一个withColumn工作,通过将自身乘以10来转换每行的秩值 但是,第二个withColumn失败,它只是将当前日期/时间作为新的lastRanOn列添加到所有行中
要使lastRanOn列添加生效,我需要做些什么?

您的示例可能太简单了,因为修改秩也不应该起作用

withColumn不更新数据帧,而是创建一个新的数据帧

所以你必须做到:

// if myDf is a var
myDf.show(5)
myDf = myDf.withColumn("rank", myDf("rank") * 10)
myDf = myDf.withColumn("lastRanOn", current_date())
println("And now:")
myDf.show(5)
或例如:

myDf.withColumn("rank", myDf("rank") * 10).withColumn("lastRanOn", current_date()).show(5)

只有这样,您才能添加新列-在重新分配新的数据帧引用后

为什么要添加DV?它不是一个复制品,它显示了研究和努力,是关于这个主题的,并且包含一个…为什么您要使用Scala 2.12和Spark。某些功能可能无法按预期工作。请再添加一条注释:请记住DataFrame/Dataset与RDD一样是不可变的。