Если вы хотите переименовать вложенный столбец, вы можете сделать следующее:
- сгладить / разнести все столбцы структуры
- переименовать столбец
- свернутьвсе столбцы назад
Допустим, ваша схема набора данных выглядит следующим образом:
root
|-- col1
|-- col2
|-- struct1
| |-- timestamp
| |-- a
| |-- b
Так что вы можете сделать следующее
ds = ds
.select(col("*"), col("struct1.*"))
.withColumnRenamed("timestamp", "timestamp_")
.select(
col("col1"),
col("col2"),
struct("timestamp_", "a", "b").as("struct1")
);
В случае, если вы хотитечтобы переименовать вложенный столбец внутри массива, сначала необходимо расширить массив с помощью функции explode
.
ds = ds.select(col("a"), col("b"), explode(col("struct1")))
Затем вы можете переименовать вложенный столбец, как описано выше.Если после переименования вы хотите свернуть структуры обратно под массив, используйте groupBy(...).agg(collect_list(...))
.