Spark withColumn работает для изменения столбца, но не добавляет новый - PullRequest
0 голосов
/ 29 мая 2018

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 работает, преобразуя значение rank каждой строки, умножая себя на 10
  • Однако вторая withColumn завершается неудачно, просто добавляя текущую дату / время ко всем строкам в виде нового столбца lastRanOn

Что мне нужно сделать, чтобы добавилось добавление столбца lastRanOn?

1 Ответ

0 голосов
/ 29 мая 2018

Ваш пример, вероятно, слишком прост, потому что изменение 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...