Получение значений столбца Row как их типа Scala, а не Column - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь добиться вывода значений для определенных столбцов DataFrame с учетом значений каждой отдельной строки.

.withColumn("date", when(col("date").isNull, lit(new DateTime(col("timestamp").as[Long]).getYear)))

Проблема в том, что я не могу понять, как получитьдля каждого из объектов Row его значение для данного столбца.Я видел другие решения, но они либо перечисляют весь набор значений для всех строк, либо просто получают первое из них, чего я не пытаюсь достичь.

ИзображениеПример DF вроде этого ...

(year, val1, val2, val3, timestamp)
(null, 10,   12,   null, 123456789)
(null, 11,   12,   null, 234567897)

И что я хочу увидеть после применения отдельных функций (например, извлечения года из метки времени) для каждой из строк, это ...

(year,                        val1, val2, val3, timestamp)
(2018 [using DateTime class], 10,   12,   1012, 123456789)
(2018 [using DateTime class], 12,   12,   1212, 234567897)

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 08 февраля 2019

То, где UDFs вступают в игру:

val udf_extractYear = udf((ts:Long) => new DateTime(ts).getYear)

, тогда вы можете использовать это, например,

df
.withColumn("year", when(col("year").isNull, udf_extractYear(col("timestamp"))).otherwise(col("year")))
.show()

Как вы можете видеть столбец timestampавтоматически отображается на Long

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