У меня есть столбец «студенты» со следующей схемой
root
|-- t1: integer (nullable = true)
|-- t2: integer (nullable = true)
|-- StudentsInfo: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- rollNumber: integer (nullable = true)
| | |-- complaints: map (nullable = true)
| | | |-- key: string
| | | |-- value: struct (valueContainsNull = true)
| | | | |-- severityOfComplaintX: integer (nullable = true)
| | | | |-- numInstancesofComplaintX: integer (nullable = true)
Я хочу преобразовать этот столбец «studentInfo» в два производных столбца
Я получаю следующие два столбца (каждый типа "Map"): "compaintSeverityOfComplaintX" "compaintNumInstancesofComplaintX".
Здесь понимание запроса может не иметь значения. Это некий рабочий запрос, который извлекает два столбца (тип: Map) из столбца типа «Студенты»
Но проблема в том, когда значение столбца («studentInfo») равно NULL. Он пропускает всю строку (как и ожидалось).
Я хочу обновить свой SQL запрос, чтобы, когда значение столбца «studentInfo» для rowX равно NULL, он должен добавить пустую MAP в качестве значения для производных столбцов »compaintSeverityOfComplaintX "и" compaintNumInstancesofComplaintX "
Что лучше здесь обрабатывать нулевые значения? Например,
For row-i:
when "students" == null:
set newly derived column compaintSeverityOfComplaintX = empty Map
set newly derived column compaintNumInstancesofComplaintX = empty Map
else
run above SQL to set proper values for newly derived columns compaintSeverityOfComplaintX and compaintNumInstancesofComplaintX
Обновление: я попытался добавить фиктивный studentInfo, но он выдает ошибку
withColumn("students", when($"students".isNull, typedLit(Seq.empty[Any])).otherwise($"students"))
Ошибка: java .lang.RuntimeException: неподдерживаемый класс буквенного типа scala .collection. неизменяемый.Nil $ List ()