繁体   English   中英

Spark withColumn用于修改列,但不添加新列

[英]Spark withColumn working for modifying column but not adding a new one

这里是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来转换每行的rank
  • 但是第二个withColumn失败,这只是将当前日期/时间作为新的lastRanOn列添加到所有行中

我需要做什么才能使lastRanOn列添加工作?

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

withColumn不会更新DataFrame,而是创建一个新的DataFrame。

因此,您必须执行以下操作:

// 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)

只有这样,您才能添加新列-重新分配新的DataFrame参考后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM