У меня есть схема ниже Я пытаюсь сгладить
root
|-- PORTION: struct (nullable = true)
| |-- DATA: struct (nullable = true)
| | |-- ADDR_DATA: array (nullable = true)
| | | |-- element: struct (containsNull = true)
| | | | |-- NAME: struct (nullable = true)
| | | | | |-- ALT_NAME: string (nullable = true)
| | | | | |-- TITLE: string (nullable = true)
Я использую функцию ниже, чтобы сгладить схему. Я выбрал его из Автоматически и элегантно сгладить DataFrame в Spark SQL и изменил для обработки типа массива, как показано ниже:
def flattenSchema(schema: StructType, prefix: String = null) : Array[Column] =
schema.fields.flatMap(f => {
val colName = if (prefix == null) f.name else prefix + "." + f.name
f.dataType match {
case st: StructType => flattenSchema(st, colName)
case arrayType: ArrayType => arrayType.elementType
match {
case st: StructType => flattenSchema(st, colName)
case _ => Array(col(colName))
}
case _ => Array(col(colName))
}
})
код работает, но возвращаемые данные имеют тип массива, подобный ниже вместо просто строкового или целочисленного типа.
root
|-- ALT_NAME: array (nullable = true)
| |-- element: string (containsNull = true)
|-- TITLE: array (nullable = true)
| |-- element: string (containsNull = true)
данные выглядят как показано ниже
[John Doe] | [John temp]
Мой вопрос, есть ли Таким образом, я могу сгладить схему до строковых или целочисленных типов вместо массива строк, как показано на рисунке. Если нет, то как можно преобразовать массив в строку динамически. Мне нравится, есть решение для любой схемы. спасибо за помощь