Рассмотрим следующую схему:
root
|-- A: string (nullable = true)
|-- B: string (nullable = true)
|-- C: string (nullable = true)
|-- D: struct (nullable = true)
| |-- d1: struct (nullable = true)
| | |-- timestamp: string (nullable = true)
| | |-- timeZoneType: string (nullable = true)
| | |-- zoneName: string (nullable = true)
| |-- d2: string (nullable = true)
| |-- d3: string (nullable = true)
|-- E: array (nullable = true)
| |-- e1: struct (nullable = true)
| | |-- transactionId: string (nullable = true)
| | |-- timeStamp: string (nullable = true)
| | |-- instanceId: string (nullable = true)
| | |-- userId: string (nullable = true)
| | |-- reason: string (nullable = true)
| |-- e2: array (nullable = true)
| | |-- transactionId: string (nullable = true)
| | |-- timeStamp: string (nullable = true)
| | |-- instanceId: string (nullable = true)
| | |-- userId: string (nullable = true)
| | |-- reason: string (nullable = true)
| | |-- additionalData: map (nullable = true)
| | | |-- key: string
| | | |-- value: string (valueContainsNull = true)
Как удалить набор значений столбцов из DataFrame , не удаляя его из схемы в PySpark?Это отличается от удаления определенных столбцов из всей схемы.
Предположим, что столбцы, которые нужно сохранить, находятся в списке keepColumns
.Я хотел бы заменить записи всех других столбцов на NULL
, оставив при этом записи keepColumns
без изменений.
Например,
keepColumns = ["C",
"D.d1.zoneName",
"E.e1.reason",
"E.e2.timeStamp"]
Обратите внимание на вложенные поля Array и Struct.Я даже не смог бы использовать select
для подполя типа ArrayType, если бы не использовал индекс, такой как select E.e2[0].timeStamp from table1
(после применения df.createOrReplaceTempView("table1")
).
Следуя решению, получившему наибольшее количество голосов, указанному в этот пост тоже не работает.Это просто показывает отсутствие изменений в существующих значениях.