У меня есть набор данных, как показано ниже
Dataset<Row> dataset = ...
dataset.show()
| NAME | DOB |
+------+----------+
| John | 19801012 |
| Mark | 19760502 |
| Mick | 19911208 |
Я хочу преобразовать его в формат ниже (в формате DOB)
| NAME | DOB |
+------+------------+
| John | 1980-10-12 |
| Mark | 1976-05-02 |
| Mick | 1991-12-08 |
Как я могу это сделать? По сути, я пытаюсь понять, как управлять существующими строковыми значениями столбцов обычным способом.
Я пробовал использовать dataset.withColumn
, но не мог понять, как этого добиться.
Ценю любую помощь.
Предполагая, что DOB - это строка, вы можете написать UDF
def formatDate(s: String): String {
// date formatting code
}
val formatDateUdf = udf(formatDate(_: String))
ds.select($"NAME", formatDateUdf($"DOB").as("DOB"))
С помощью функций «подстрока» и «конкат»:
df.withColumn("DOB_FORMATED",
concat(substring($"DOB", 0, 4), lit("-"), substring($"DOB", 5, 2), lit("-"), substring($"DOB", 7, 2)))
В java: dataset.withColumn ("DOB", concat (substring (col ("DOB"), 0, 4), lit ("-"), substring (col ("DOB"), 5, 2), lit ( "-"), substring (col ("DOB"), 7, 2)))
Загрузите данные в фрейм данных (deltaData) и просто используйте следующую строку
deltaData.withColumn("DOB", date_format(to_date($"DOB", "yyyyMMdd"), "yyyy-MM-dd")).show()
Те, кто проголосовал против, не могли бы вы объяснить, почему, чтобы я избегал в будущем